我正在继承一个StringElement
in MonoTouch.Dialog
。在那里我可以附加到Tapped
事件或者我可以覆盖Selected()
. 如果我点击元素,两者都会触发。但是,Selected()
是让我访问DialogViewController
该元素的成员,该信息不会传递给Tapped
事件。
这里的逻辑是什么?一个元素是否应该知道它DialogViewController
?如果是:那么如何从事件中获取控制器Tapped
?
我正在继承一个StringElement
in MonoTouch.Dialog
。在那里我可以附加到Tapped
事件或者我可以覆盖Selected()
. 如果我点击元素,两者都会触发。但是,Selected()
是让我访问DialogViewController
该元素的成员,该信息不会传递给Tapped
事件。
这里的逻辑是什么?一个元素是否应该知道它DialogViewController
?如果是:那么如何从事件中获取控制器Tapped
?
在我编写该代码时,想法很简单,即使用 lambda,您可以将所需的任何状态传递给您的 Tapped 处理程序,而无需使用 object/EventArgs 模式。
所以你会做这样的事情:
var dialogViewController = CreateDvC ();
new StringElement ("....", () => {
// reference any variables here
// my container is:
Console.Writeline (dialogViewController);
}
通过查看 Github 上的源代码发现了自己。触发事件的唯一地方Tapped
是 from Selected()
。所以我认为 Tapped 真的应该按类型EventHandler
而不是 Action。
public override void Selected (DialogViewController dvc, UITableView tableView, NSIndexPath indexPath)
{
if (Tapped != null)
Tapped ();
tableView.DeselectRow (indexPath, true);
}