0

我正在尝试使用 MTD 框架在 Xamarin.IOS 中实现无限滚动。为此,我从 TableView 属性中处理了 Scrolled 事件,但是一旦我为该事件定义了一个处理程序,我的元素的所有 Tapped 事件(都是 StyledStringElement)停止工作,不再调用该处理程序。即使我稍后在代码中取消订阅该事件,只要我“触摸”Scrolled 事件,单元格 Tapped 就会中断。

这是我处理滚动事件的方法:

_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);

有任何想法吗 ?如果这是一个错误或不应该做的事情,那么实现无限滚动的正确方法是什么?我必须检测到用户正在接近表格底部以“预取”下一页。

谢谢。

4

1 回答 1

1

问题是基于事件的系统和 UIKit 原生的基于委托的系统是相互排斥的。这意味着如果使用事件,则不能使用委托,如果使用委托,则不能使用事件。

您正在访问的 TableView 恰好有一个由 MonoTouch.Dialog 设置的委托处理程序,因此当您提供事件时,它会重置它的内部处理。

唯一的解决方案是对内部 Tableview 委托进行子类化,并将其作为您的委托来拦截这些消息。

于 2013-09-22T16:59:07.790 回答