我有一个MonoTouch iPhone应用程序,它有一个UITableViewController
作为它的主视图控制器。
我正在尝试检测何时使用代码滚动tableview:
this.TableView.Scrolled += TableViewScrolled;
其中TableViewScrolled(object sender, EventArgs e) { }
是我调用的方法。
但由于某种原因,它无法调用TableViewScrolled()
。
有没有人有这方面的经验?
答案 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会为UIScrollView
(UITableView
的父级)创建自己的内部委托类型,它会覆盖(委托的)方法并将它们公开为更多自然(在.NET中),类型中的事件。
这实际上意味着您无法将这些UITableView
事件与您自己的委托UITableViewDelegate
类型混合在一起(因为后者会覆盖前者)。
答案 2 :(得分:3)
阅读本文档:UIScrollViewDelegate
您可以使用:
- (void) scrollViewDidScroll:(UIScrollView *)scrollView {
}
或
- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView {
}
祝你好运,
森