Ios 句柄按钮在UITableViewCell内单击

Ios 句柄按钮在UITableViewCell内单击,ios,uitableview,xamarin.ios,Ios,Uitableview,Xamarin.ios,我似乎无法正确处理自定义UITableViewCell中的按钮单击。它是一个包含标签和按钮的单元格。我有以下代码: var cell = tableView.DequeueReusableCell (cellKey) as ApptHistoryCell; if (cell == null) { cell = _container.Cell; cell.SelectionStyle = UITableViewCellSelectionStyle.None; } if (Info

我似乎无法正确处理自定义UITableViewCell中的按钮单击。它是一个包含标签和按钮的单元格。我有以下代码:

var cell = tableView.DequeueReusableCell (cellKey) as ApptHistoryCell;
if (cell == null)
{
    cell = _container.Cell;
    cell.SelectionStyle = UITableViewCellSelectionStyle.None;
}

if (InfoClicked != null)
{
    cell.ActionButton.TouchUpInside += InfoClicked;
}
InfoClicked是在创建单元格时在循环中传递的事件处理程序。当重新使用该单元格时,这会导致空引用异常,因为(我认为)TouchUpInside正在尝试调用2个处理程序。旧的和新的,这会导致崩溃。如果我将事件处理程序放在cell==null If块中,则会显示错误的操作

我如何正确处理点击


谢谢

您应该从已将按钮连接到所有者目标(视图控制器)的xib文件创建单元格。

我处理自定义单元格内按钮的方式:

  • 我定义了一个iAction,连接到自定义单元格内的UIButton事件
  • 我为单元格定义了一个委托和一个委托方法来处理按钮操作
  • iAction调用该委托方法
  • 在cellAtRow中定义单元格时。。。我将tableViewController设置为代理。cell.delegate=self
  • 我在tableViewController中的委托方法中执行我想执行的任何操作

有意义吗?

在自定义单元格中,只需将按钮定位在IB并与属性建立连接

现在,在位于
cellForRowAtIndexPath
的控制器中,您需要的是,标记该按钮,说:

(MyCustomCell*)cell.myButton = indexPath.row;
现在,在这之后,只需将click事件设置为:-

[(MyCustomCell*)cell.myButton addTarget:self action:@selector(NeedFunctionToCall:) forControlEvents:UIControlEventTouchUpInside];
现在,在同一个视图控制器上,实现所需的方法,如下所示:

-(void)NeedFunctionToCall:(id)sender
{
 NSLog("Got the event :-> %d, from the cell/button",[sender tag]);
}

这就是我正在做的。现在我想处理单元格上的点击操作,有没有办法也通过这个委托方法获得该单元格的indexPath?这是一个很好的问题Isuru,值得单独发表一篇文章。这就是现在困扰我的问题。