Bre*_*ett 7 c# iphone objective-c uitableview xamarin.ios
我有一个MonoTouch iPhone应用程序,它有一个UITableViewController主视图控制器.
我试图检测何时使用代码滚动tableview:
this.TableView.Scrolled += TableViewScrolled;
Run Code Online (Sandbox Code Playgroud)
TableViewScrolled(object sender, EventArgs e) { }我的方法在哪里被调用.但TableViewScrolled()由于某些原因,它未能称之为.
有人对这个有经验么?
Aga*_*gat 14
我的答案实际上并不仅仅是关于滚动,但由于我花了一个小时来解决滚动事件引起的问题,我决定在这里写答案.
所以,给我的问题是订阅后:
this.myTableView.Scrolled += (sender, args) =>
{
...
};
Run Code Online (Sandbox Code Playgroud)
我从UITableViewDataSource类继承的重写方法:
public override UIView GetViewForHeader(UITableView tableView, int section)
public override float GetHeightForRow(UITableView tableView, NSIndexPath indexPath)
Run Code Online (Sandbox Code Playgroud)
停止工作(变得没有被召唤).这是......显然,非常意外!
所以,我只需要覆盖
public override void Scrolled(UIScrollView scrollView)
Run Code Online (Sandbox Code Playgroud)
在相同的数据源委托中,而不是在表视图上订阅现有的事件.
我希望,有人不会遇到这样的麻烦!
@Krumelur对前一个答案的评论非常好,IMO应该是一个答案(不是评论).
关键是,如果您设置a Delegate(或WeakDelegate),UITableView那么它的事件将不再起作用.
为什么?因为要实现这些事件,MonoTouch会为其UIScrollView(父代UITableView)创建它自己的内部委托类型,它会覆盖(委托的)方法,并将它们公开为更自然(在.NET中)类型中的事件.
这实际上意味着您不能将这些UITableView事件与您自己的委托UITableViewDelegate类型混合(因为后者将覆盖前者).
| 归档时间: |
|
| 查看次数: |
4579 次 |
| 最近记录: |