在UITableViewCell内部处理按钮
我似乎无法在自定义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是在创建单元格时循环传递的事件处理程序。 当重新使用该单元格时,这会导致空引用exception,因为(我认为)TouchUpInside正在尝试调用2个处理程序。 旧的和新的,导致崩溃。 如果我将事件处理程序放在cell == null if block中,则会显示错误的操作。
如何正确处理点击?
谢谢!
我在自定义单元格中处理按钮的方式:
- 我定义了一个IBAction,我连接到自定义单元格内的UIButton事件
- 我为单元格定义了委托和委托方法来处理按钮操作
- IBAction调用该委托方法
- 在cellAtRow中定义单元格时…我将tableViewController设置为委托。 cell.delegate =自我;
- 我在tableViewController中的delegate方法中做了我想做的任何动作
说得通?
你应该从一个xib文件创建你的单元格,该文件已经将按钮连接到所有者的目标(视图控制器)。
在您的自定义单元格中,只需在IB处找到您的按钮并与该属性建立连接。
现在,在cellForRowAtIndexPath
的控制器中,只需标记该按钮,即可:
(MyCustomCell*)cell.myButton = indexPath.row;
现在,之后只需设置点击事件: –
[(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]); }