如何从事件中删除/取消注册事件处理程序?

Adw*_*wen 3 c# mono events uitableview xamarin.ios

我做了一个定制的uitableviewcell.单元格由标签和UIButton组成.一切都工作正常,直到我发现可重复使用的细胞与向uibutton添加事件相结合存在一个小问题.所以当我点击uibutton时,单元格第一次工作得很好.但是当我滚动它的那一刻开始给我错误的细节信息.如果我注释掉可重复使用的单元格部分(并让它每次都创建一个新的单元格),它就可以正常工作而没有任何问题.所以我的假设是事件'挂起'进入具有旧信息的单元格.我添加这样的事件:

myButton.TouchDown += delegate{
  //some code here
}
Run Code Online (Sandbox Code Playgroud)

显然我不能像这样取消注册吗?在monotouch中克服这个特殊问题最简单的方法是什么?

Dim*_*kos 9

您可以将匿名方法和lambda作为事件处理程序.只需将它们保存为局部变量即可

EventHandler theHandler = delegate(obj sender, EventArgs e) 
{ Console.WriteLine("The handler!"); };
//... or: EventHandler theHandler = (sender, args) => { Console.WriteLine("The handler!"); };
private void HookEvent()
{
    myButton.TouchDown += this.theHandler;
}

private void UnhookEvent()
{
    myButton.TouchDown -= this.theHandler;
}
Run Code Online (Sandbox Code Playgroud)