【问题标题】:Is it possible to add observer to tableView.contentOffset?是否可以将观察者添加到 tableView.contentOffset?
【发布时间】:2012-08-18 17:53:53
【问题描述】:

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

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

还有其他解决方案吗?

【问题讨论】:

    标签: ios uitableview observer-pattern


    【解决方案1】:

    斯威夫特 5

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

    【讨论】:

      【解决方案2】:

      斯威夫特 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
          }
        }
      

      【讨论】:

      • 能否请您添加删除“contentOffset”观察者的代码?
      【解决方案3】:

      UITableViewUIScrollView 的子类,因此您可以使用UIScrollViewDelegate 方法scrollViewDidScroll: 在视图滚动时收到通知。在该方法中检查scrollViewcontentOffset

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

      [self.tableView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew | NSKeyValueObservingOptionOld context:nil];
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 1970-01-01
      • 2014-01-28
      • 1970-01-01
      • 1970-01-01
      • 2011-06-17
      相关资源
      最近更新 更多