MonoTouch-检测UITableView滚动
本文关键字:滚动 UITableView 检测 MonoTouch- | 更新日期: 2023-09-27 18:25:57
我有一个MonoTouch iPhone应用程序,它的主视图控制器是UITableViewController
。
我正在尝试检测表视图何时滚动代码:
this.TableView.Scrolled += TableViewScrolled;
其中CCD_ 2是我被调用的方法。但由于某种原因,它未能调用TableViewScrolled()
。
有人有这方面的经验吗?
我的答案是实际上不仅仅是关于滚动,而且因为我花了相当长的一个小时来解决滚动事件引起的问题,所以我决定在这里写答案。
所以,我的问题是,在订阅后:
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为UIScrollView
(UITableView
的父级)创建了自己的内部委托类型,在那里它覆盖(委托的)方法,并将它们公开为更自然的(在.NET中)类型内的事件。
这实际上意味着您不能将这些UITableView
事件与自己的委托UITableViewDelegate
类型混合(因为后者将覆盖前者)。
阅读此文档:UIScrollViewDelegate
您可以使用:
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
}
或
- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView {
}
祝你好运,Nathan