MonoTouch - 检测UITableView滚动

时间:2012-02-27 01:22:19

标签: c# iphone objective-c uitableview xamarin.ios

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

我正在尝试检测何时使用代码滚动tableview:

this.TableView.Scrolled += TableViewScrolled;

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

有没有人有这方面的经验?

3 个答案:

答案 0 :(得分:13)

我的答案实际上并不仅仅是关于滚动,而是因为我花了一小时与滚动事件引起的问题作斗争,我决定在这里写答案。

所以,对我来说问题是订阅后:

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

我从UITableViewDataSource类继承的override方法:

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

停止工作(未被调用)。这显然是非常意外的!

所以,我只是必须覆盖

    public override void Scrolled(UIScrollView scrollView)

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

我希望,有人不会遇到这样的麻烦!

答案 1 :(得分:6)

@ Krumelur对前一个答案的评论非常好,IMO应该是一个答案(不是评论)。

关键是,如果您为Delegate设置了WeakDelegate(或UITableView},那么它的活动将不再有效。

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

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

答案 2 :(得分:3)

阅读本文档:UIScrollViewDelegate

您可以使用:

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


}

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


}
祝你好运, 森