MonoTouch-检测UITableView滚动

本文关键字:滚动 UITableView 检测 MonoTouch- | 更新日期: 2023-09-27 18:25:57

我有一个MonoTouch iPhone应用程序,它的主视图控制器是UITableViewController

我正在尝试检测表视图何时滚动代码:

this.TableView.Scrolled += TableViewScrolled;

其中CCD_ 2是我被调用的方法。但由于某种原因,它未能调用TableViewScrolled()

有人有这方面的经验吗?

MonoTouch-检测UITableView滚动

我的答案是实际上不仅仅是关于滚动,而且因为我花了相当长的一个小时来解决滚动事件引起的问题,所以我决定在这里写答案。

所以,我的问题是,在订阅后:

this.myTableView.Scrolled += (sender, args) =>
  {
      ...
  };

我的overriden方法继承自UITableViewDataSource类:

    public override UIView GetViewForHeader(UITableView tableView, int section)
    public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)

停止工作(未被调用)。那是。。。显然,非常出乎意料!

所以,我只是必须覆盖

    public override void Scrolled(UIScrollView scrollView)

在同一数据源中,委托,而不是订阅表视图中的现有事件。

我希望,不会有人惹上这样的麻烦!

@Krumelur对上一个答案的评论提出了一个非常好的观点,IMO应该是一个答案(而不是评论)。

关键是,如果您将Delegate(或WeakDelegate)设置为UITableView,那么它的事件将不再工作。

为什么,因为为了实现这些事件,MonoTouch为UIScrollViewUITableView的父级)创建了自己的内部委托类型,在那里它覆盖(委托的)方法,并将它们公开为更自然的(在.NET中)类型内的事件。

这实际上意味着您不能将这些UITableView事件与自己的委托UITableViewDelegate类型混合(因为后者将覆盖前者)。

阅读此文档:UIScrollViewDelegate

您可以使用:

- (void) scrollViewDidScroll:(UIScrollView *)scrollView {

}

- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView {

}

祝你好运,Nathan