Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 自定义tableviewcell按钮事件多次触发_Ios_Uitableview_Xamarin_Xamarin.ios_Tableviewcell - Fatal编程技术网

Ios 自定义tableviewcell按钮事件多次触发

Ios 自定义tableviewcell按钮事件多次触发,ios,uitableview,xamarin,xamarin.ios,tableviewcell,Ios,Uitableview,Xamarin,Xamarin.ios,Tableviewcell,我有一个使用自定义tableview单元格的tableview 当我们点击按钮时,事件会被触发多次,但不是所有时间 我观察到,在我的tableview中,在下面的代码中,单元格从不为空 var cell = (MyCustomCell)tableView.DequeueReusableCell (MyCustomCell.Key); 我正在为我的tableview使用动态原型 var cell = (MyCustomCell)tableView.DequeueReusableCell (MyC

我有一个使用自定义tableview单元格的tableview

当我们点击按钮时,事件会被触发多次,但不是所有时间

我观察到,在我的tableview中,在下面的代码中,单元格从不为空

var cell = (MyCustomCell)tableView.DequeueReusableCell (MyCustomCell.Key);
我正在为我的tableview使用动态原型

var cell = (MyCustomCell)tableView.DequeueReusableCell (MyCustomCell.Key);
我认为单元格的可重用性和按钮甚至绑定都存在问题,但我无法弄清楚为什么会发生这种情况以及如何解决它

更新

 public override UITableViewCell GetCell (UITableView tableView, NSIndexPath indexPath)  
 {
//Getting the value from arrary as data source here
var cell = (MyCustomCell)tableView.DequeueReusableCell (MyCustomCell.Key);

if (cell == null) {
    cell = MyCustomCell.Create ();
}
button.TouchUpInside -= yourHandler; 
button.TouchUpInside += yourHandler;

//assigning the values to labels
return cell;
 }

无论是什么,我删除按钮事件并添加它,那么它不应该多次触发事件

当单元格被重用时,您的按钮事件处理程序可能会为同一单元格订阅多次。一个简单的解决方法是在订阅之前取消订阅:

button.TouchUpInside -= yourHandler;
button.TouchUpInside += yourHandler;

如果将lambda用作委托,请将其更改为方法委托

,因为重复使用单元格,按钮事件处理程序可能会为同一单元格订阅多次。一个简单的解决方法是在订阅之前取消订阅:

button.TouchUpInside -= yourHandler;
button.TouchUpInside += yourHandler;

如果将lambda用作委托,请将其更改为方法委托

只需在tableviewcell中的awakefromnib添加事件,或者在xcode中打开情节提要并设置iAction

    btn.TouchUpInside += yourHandler;

如果你想在单元格被重用时做些什么,在tableviewcell中覆盖prepareforuse

只需在tableviewcell中的awakefromnib添加事件,或者在xcode中打开情节提要并设置iAction

    btn.TouchUpInside += yourHandler;


如果你想在重复使用单元格时做些什么..在tableviewcell中覆盖prepareforreuse

发布你的cellForRowAtIndexPath方法,以及选中相关按钮的表格视图单元格连接检查器的屏幕截图。@duncac-请查找更新我不确定我能帮到多少忙。我对Xamarin或C#一点也不熟悉。“GetCell”是Xamarin的等价物吗?您需要发布“绑定事件”的代码。请记住,DequeueReusableCell方法仅在没有回收单元可用时创建新单元。显示表视图后,通常会得到一个代码已配置的回收单元格。(如果您的单元格配置包括向按钮添加目标/操作,则每次回收单元格时,您可能会添加额外的目标/操作。yes GetCell相当于cellforRowAtIndexpath@Sharath是的,这对我来说很有效。这有点浪费,有时候你可以真正让-=+=工作,但是其他时间我个人认为这有点随意。发布你的cellForRowAtIndexPath方法,以及选中相关按钮的table view单元格连接检查器的屏幕截图。@Duncac-请查找更新我不确定我能帮多少忙。我对Xamarin或C#一点也不熟悉。是“GetCell”Xamarin等效于
cellForRowAtIndexPath
?您需要发布“绑定事件”的代码。请记住,DequeueReusableCell方法仅在没有可回收单元格的情况下创建新单元格。一旦显示表视图,您通常会得到一个已配置代码的回收单元格。(如果您的单元格配置包括向按钮添加目标/操作,则每次回收单元格时,您可能会添加额外的目标/操作。yes GetCell相当于cellforRowAtIndexpath@Sharath是的,这对我来说很有效。这有点浪费,有时候你可以真正让-=+=工作,但是其他时间我个人认为这有点偶然。如果你粘贴整个单元格代码,你应该在单元格代码中指定处理程序(即:AwakeFromNib),这会更容易得到帮助。永远不要像你现在做的那样超出它。我的疑问是,即使我在getcell中添加了事件…我正在删除事件并再次添加它。所以它应该有效吗?很难说。没有代码(正如我已经要求的)我们只能做一些毫无意义的猜测,因为我已经附上了我的getcell代码…我的疑问是,如果我删除了现有的一个并添加了新的一个…为什么会有多个事件处理程序?如果你粘贴整个单元格代码,你应该在单元格代码中添加一个处理程序(即:AwakeFromNib),这会更容易得到帮助。永远不要像你现在做的那样超出它。我的疑问是,即使我在getcell中添加了事件…我正在删除事件并再次添加它。所以它应该有效吗?很难说。没有代码(正如我已经要求的)我们只能做无用的猜测,因为我已经附加了我的getcell代码…我的疑问是,我是否删除了现有的一个,并添加了新的一个…为什么会有多个事件处理程序?我在awakefromnib上尝试了多次,仍然多次被调用我在awakefromnib上尝试了多次,仍然多次被调用