Xamarin.ios Dialog:如何从元素内访问父DialogViewController?抽头事件和Selected()方法之间的差异?
我正在将Xamarin.ios Dialog:如何从元素内访问父DialogViewController?抽头事件和Selected()方法之间的差异?,xamarin.ios,monotouch.dialog,Xamarin.ios,Monotouch.dialog,我正在将MonoTouch.Dialog中的StringElement子类化。 在那里,我可以附加到点击的事件,也可以覆盖Selected()。 如果我点击该元素,两个都会触发。 但是,Selected()允许我访问元素所属的对话框viewcontroller,该信息不会传递给点击的事件 这里的逻辑是什么?元素是否应该知道其对话框ViewController?如果是:如何从点击事件中获取控制器?通过查看Github上的源代码了解我自己。 触发点击事件的唯一位置是从Selected()。所以我认为
MonoTouch.Dialog
中的StringElement
子类化。
在那里,我可以附加到点击的事件,也可以覆盖Selected()
。
如果我点击该元素,两个都会触发。
但是,Selected()
允许我访问元素所属的对话框viewcontroller
,该信息不会传递给点击的事件
这里的逻辑是什么?元素是否应该知道其对话框ViewController
?如果是:如何从点击事件中获取控制器?通过查看Github上的源代码了解我自己。
触发点击事件的唯一位置是从Selected()
。所以我认为Tapped实际上应该是类型EventHandler
,而不是操作
public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
if (Tapped != null)
Tapped ();
tableView.DeselectRow (indexPath, true);
}
在我编写这段代码时,我的想法很简单,使用lambdas,您可以将所需的任何状态传递给被点击的处理程序,而无需使用object/EventArgs模式
所以你可以这样做:
var dialogViewController = CreateDvC ();
new StringElement ("....", () => {
// reference any variables here
// my container is:
Console.Writeline (dialogViewController);
}