[英]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会为UIScrollView
( UITableView
的父级)创建自己的内部委托类型,它会覆盖(委托的)方法,并将它们更自然地 (在.NET中)暴露在类型内的事件中。
这实际上意味着您不能将这些UITableView
事件与您自己的委托UITableViewDelegate
类型混合(因为后者将覆盖前者)。
阅读本文档: UIScrollViewDelegate
您可以使用:
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
}
要么
- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView {
}
祝你好运,内森
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.