9

我需要跟踪 tableView.contentOffset.y 是否可以将观察者添加到 tableView.contentOffset?

我认为这是不可能的,因为 contentOffset 不继承 NSObject 类。

还有其他解决方案吗?

4

3 回答 3

24

UITableView是一个UIScrollView子类,因此您可以使用该UIScrollViewDelegate方法scrollViewDidScroll:在视图滚动时得到通知。检查该contentOffset方法中scrollView

contentOffset是一个关键路径,所以你也可以使用 KVO 观察它的变化

[self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
于 2012-08-23T08:48:24.063 回答
12

斯威夫特 5

tableContentObserver = table.observe(\UITableView.contentOffset, options: .new) { [weak self] table, change in
    self?.navigationItem.rightBarButtonItem?.title = "\(change.newValue)"
}
于 2019-05-23T11:52:40.023 回答
4

斯威夫特 3

contentOffset使用键值观察 (KVO)为键路径添加观察者:

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
    }
  }
于 2018-11-13T20:28:05.360 回答