繁体   English   中英

MonoTouch - 检测UITableView滚动

[英]MonoTouch - Detect UITableView scrolling

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

我试图检测何时使用代码滚动tableview:

this.TableView.Scrolled += TableViewScrolled;

其中TableViewScrolled(object sender, EventArgs e) { }是我调用的方法。 但由于某种原因,它无法调用TableViewScrolled()

有人对这个有经验么?

我的答案实际上并不仅仅是关于滚动 ,但由于我花了一个小时来解决滚动事件引起的问题,我决定在这里写答案。

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

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

我从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 {


}

祝你好运,内森

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM