Как сократить длину вытягивания, чтобы активировать Pull to Refresh Action в iOS 6/7?
Привет, люди StackOverflow,
Я пытался выяснить этот вопрос в течение некоторого времени, но безрезультатно, и мне нужна помощь. У меня есть UITableView
ближе к нижней части моего приложения, и нет достаточного расстояния экрана, чтобы пользователь мог активировать обновление. Кто-нибудь знает, как я могу сократить расстояние, необходимое для активации действия pull для обновления (через UIRefreshControl
в iOS 6/7) на UITableView
и UIWebView
?
Спасибо заранее всем!
Ответы
Ответ 1
В соответствии с документами Apple, я не вижу способа изменить параметры UIRefreshControl
.
ссылка: https://developer.apple.com/library/ios/documentation/uikit/reference/UIRefreshControl_class/Reference/Reference.html
Используйте сторонний компонент, например ODRefreshControl (чтобы настроить расстояние прокрутки, чтобы активировать обновление, измените #define kMaxDistance
).
или...
Не используйте UIRefreshControl
и вместо этого реализуйте свою собственную логику в методе -scrollViewDidScroll
, например:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
if ((scrollView.contentOffset.y + scrollView.frame.size.height) >= scrollView.contentSize.height) {
//refresh logic
}
}
Ответ 2
вы все равно можете использовать refreshControl, но с некоторыми изменениями!
добавьте этот код в свой viewController:
var canRefresh = true
override func scrollViewDidScroll(scrollView: UIScrollView) {
if scrollView.contentOffset.y < -100 { //change 100 to whatever you want
if canRefresh && !self.refreshControl.refreshing {
self.canRefresh = false
self.refreshControl.beginRefreshing()
self.refresh() // your viewController refresh function
}
}else if scrollView.contentOffset.y >= 0 {
self.canRefresh = true
}
}
и, как обычно, в конце вашей логики обновления в функции self.refresh() add:
self.refreshControl.endRefreshing()
Ответ 3
Вы можете сделать это правильно с некоторой модификацией
lazy var refreshControl: UIRefreshControl = {
let refreshControl = UIRefreshControl()
refreshControl.tintColor = UIColor.red
return refreshControl
}()
//refreshControl.addTarget(self, action: #selector(handleRefresh), for: .valueChanged)
каждый PullToRefresh должен иметь несколько строк кода, подобных этой, функцию handleRefresh, делать все, что вам нужно для обновления страницы.
вам просто нужно закомментировать строку addTarget и добавить эту функцию в ваш код '' '
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < -80 { //change 80 to whatever you want
if !self.refreshControl.isRefreshing {
handleRefresh()
}
}
}
Я написал этот код с помощью ответа Ашкана Годрата.
Ответ 4
Для Swift 3.2 и выше:
var canRefresh = true
func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < -100 {
if canRefresh && !self.refreshControl.isRefreshing {
self.canRefresh = false
self.refreshControl.beginRefreshing()
self.handleRefresh()
}
} else if scrollView.contentOffset.y >= 0 {
self.canRefresh = true
}
}