MonoTouch.Dialog:如何从Element中访问父DialogViewController? Tapped事件和Selected()方法之间的区别?

时间:2012-10-17 11:46:26

标签: xamarin.ios monotouch.dialog

我在StringElement中继承了MonoTouch.Dialog。 在那里,我可以附加到Tapped事件,或者我可以覆盖Selected()。 如果点击元素,两者都会触发。 但是,Selected()允许我访问该元素所属的DialogViewController,其中此信息不会传递给Tapped事件。

这里的逻辑是什么?元素是否应该知道它的DialogViewController?如果是:如何从Tapped事件中获取控制器呢?

2 个答案:

答案 0 :(得分:1)

通过查看Github上的源代码找到自己。 触发Tapped事件的唯一位置来自Selected()。所以我认为Tapped应该是EventHandler类型而不是Action。

public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
    if (Tapped != null)
        Tapped ();
    tableView.DeselectRow (indexPath, true);
}

答案 1 :(得分:1)

在我编写代码的时候,想法就是使用lambdas,你可以将你需要的任何状态传递给你的Tapped处理程序,而不使用object / EventArgs模式。

所以你会做类似的事情:

var dialogViewController = CreateDvC ();
new StringElement ("....", () => { 
    // reference any variables here
    // my container is:
    Console.Writeline (dialogViewController); 
}