3

我似乎无法在自定义 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 块中,则会显示错误的操作。

如何正确处理点击?

谢谢!

4

3 回答 3

5

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

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

说得通?

于 2012-11-26T07:43:00.547 回答
0

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

于 2012-11-26T07:41:36.587 回答
-3

在您的自定义单元格中,只需在 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]);
}
于 2012-11-26T08:45:54.863 回答