Я хочу добавить небольшую кнопку в нижнем правом углу UITableView. Когда мы находимся в верхней половине таблицы, кнопка программно прокручивает вас до нижней части, а когда вы находитесь в нижней половине, она поднимает вас вверх. Иконка кнопки меняется с «goto top» на «goto bottom» или наоборот в зависимости от ситуации.UITableView получает среднее положение через смещение содержимого
В моем коде ниже кнопка работает нормально - вы нажимаете ее, когда находитесь наверху, вы попадаете в нижнюю часть, а изображение кнопки меняется на значок «goto top». Однако, перетаскивание вверх и вниз, как вы бы традиционно в таблице, не заставляет кнопку менять значок. Вам даже нужно пройти мимо границы (сверху или снизу) таблицы, чтобы она перевернулась в правильное состояние.
При нажатии кнопки, если мы пройдем на полпути (как определено функцией pastHalfway), мы переходим либо в верхнюю, либо нижнюю часть таблицы. Что-то не так с этим, но я немного побеспокоился и в основном делал вещи не так хорошо по-разному. Я думаю, что проблема заключается в том, что я не правильно определяю смещение содержимого средней точки таблицы.
func pastHalfway() -> Bool {
// TODO: This doesn't work
let offset:CGPoint = self.tableView.contentOffset
let height:CGFloat = self.tableView.frame.height
println("pastHalfway offset.y=\(offset.y) height=\(height)")
return offset.y > (height/3.0) // 3.0 is 3/4 down the table
}
func gotoButtonPressed(sender: UIButton!) {
if let realPost = post {
if realPost.numberComments > 0 {
if self.pastHalfway() {
let indexPath:NSIndexPath = NSIndexPath(forRow: 0, inSection: 0)
self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Top, animated: true)
} else {
let indexPath:NSIndexPath = NSIndexPath(forRow: realPost.numberComments - 1, inSection: 1)
self.tableView.scrollToRowAtIndexPath(indexPath, atScrollPosition: UITableViewScrollPosition.Bottom, animated: true)
}
}
}
}
func maybeShowGotoButtons() {
let yOffset:CGFloat = self.tableView.contentOffset.y
if (self.post!.numberComments < minRowsToShowGotoButtons) {
// Hide and disable buttons
self.gotoButton.hidden = true
self.gotoButton.enabled = false
} else {
// Show buttons, depending on content offset
if self.pastHalfway() {
self.gotoButton.setImage(UIImage(named: "gotoTopIcon"), forState: .Normal)
} else {
self.gotoButton.setImage(UIImage(named: "gotoBottomIcon"), forState: .Normal)
}
// And enable
self.gotoButton.hidden = false
self.gotoButton.enabled = true
}
}
UIScrollView Делегаты
override func scrollViewWillBeginDragging(scrollView: UIScrollView) {
UIView.animateWithDuration(0.1, animations: {
self.gotoButton.alpha = 0.5
})
}
override func scrollViewWillEndDragging(scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {
UIView.animateWithDuration(0.2, animations: {
self.gotoButton.alpha = 1.0
self.maybeShowGotoButtons()
})
}
override func scrollViewDidEndScrollingAnimation(scrollView: UIScrollView) {
// This is used for the programmatic scroll top/bottom when clicking buttons
self.maybeShowGotoButtons()
}
это связано? http://stackoverflow.com/a/26142136/388280 – ytbryan
это было частью решения – nflacco