是否可以将观察者添加到tableView.contentOffset?

Vol*_*da2 7 uitableview ios observer-pattern

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

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

还有其他解决办法吗?

wat*_*n12 22

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

contentOffset 是一个关键路径,因此您也可以使用KVO观察其变化

[self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
Run Code Online (Sandbox Code Playgroud)


Mik*_*hov 9

斯威夫特 5

tableContentObserver = table.observe(\UITableView.contentOffset, options: .new) { [weak self] table, change in
    self?.navigationItem.rightBarButtonItem?.title = "\(change.newValue)"
}
Run Code Online (Sandbox Code Playgroud)


小智 7

雨燕3

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

tableView.addObserver(self, forKeyPath: #keyPath(UIScrollView.contentOffset), options: [.old, .new], context: nil)
Run Code Online (Sandbox Code Playgroud)

并处理更改通知:

override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
    if keyPath == #keyPath(UIScrollView.contentOffset) {
      // Your code
    }
  }
Run Code Online (Sandbox Code Playgroud)

  • 您可以添加代码来删除“contentOffset”观察者吗? (2认同)