【发布时间】:2012-08-18 17:53:53
【问题描述】:
我需要跟踪 tableView.contentOffset.y 是否可以将观察者添加到 tableView.contentOffset?
我认为这是不可能的,因为 contentOffset 不继承 NSObject 类。
还有其他解决方案吗?
【问题讨论】:
标签: ios uitableview observer-pattern
我需要跟踪 tableView.contentOffset.y 是否可以将观察者添加到 tableView.contentOffset?
我认为这是不可能的,因为 contentOffset 不继承 NSObject 类。
还有其他解决方案吗?
【问题讨论】:
标签: ios uitableview observer-pattern
斯威夫特 5
tableContentObserver = table.observe(\UITableView.contentOffset, options: .new) { [weak self] table, change in
self?.navigationItem.rightBarButtonItem?.title = "\(change.newValue)"
}
【讨论】:
斯威夫特 3
使用键值观察 (KVO) 为 contentOffset 键路径添加观察者:
tableView.addObserver(self, forKeyPath: #keyPath(UIScrollView.contentOffset), options: [.old, .new], context: nil)
并处理更改通知:
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
if keyPath == #keyPath(UIScrollView.contentOffset) {
// Your code
}
}
【讨论】:
UITableView 是UIScrollView 的子类,因此您可以使用UIScrollViewDelegate 方法scrollViewDidScroll: 在视图滚动时收到通知。在该方法中检查scrollView 的contentOffset
contentOffset是关键路径,所以你也可以使用KVO观察它的变化
[self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];