我正在尝试使用MTD框架在Xamarin.IOS中实现无限滚动。为了实现这一点,我从TableView属性处理了Scrolled事件,但是一旦我为该事件定义了一个处理程序,我的元素的所有Tapped事件(都是StyledStringElement)都停止工作,不再调用处理程序。即使我稍后在我的代码中取消订阅该事件,只要我“触摸”滚动事件,单元格Tapped break。
以下是我处理滚动事件的方法:
_root_ViewController = new DialogViewController(_rootElement);
_root_ViewController.TableView.Scrolled += TableView_Scrolled;
以下是我创建细胞的方法:
StyledStringElement newCell = new StyledStringElement(item.Name)
{Accessory = UITableViewCellAccessory.DisclosureIndicator };
newCell.Tapped+=()=> _nav.PushViewController(getDetailView(item.Name, item.ID), true);
有什么想法吗?如果它是一个不应该做的错误或什么,实现无限滚动的正确方法是什么?我要检测用户正在查询表格的底部以“预取”下一页。
感谢。
答案 0 :(得分:1)
问题是基于事件的系统和UIKit的基于本机委托的系统是互斥的。这意味着如果您使用事件,则无法使用委托,如果您使用委托,则无法使用事件。
您正在访问的TableView恰好具有由MonoTouch.Dialog设置的委托处理程序,因此当您提供事件时,它会重置事件的内部处理。
唯一的解决方案是对内部Tableview委托进行子类化,并将其作为委托来拦截这些消息。