2012-11-26 74 views
3

我似乎无法在自定义的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是在单元创建循环中传递的事件处理程序。当单元格被重用时,这会导致空引用异常,因为(我认为)TouchUpInside正在尝试调用2个处理程序。旧的和新的,导致崩溃。如果我把事件处理程序放在cell == null中,那么会显示错误的动作。

如何正确处理点击?

谢谢!

回答

5

予处理定制单元内的按钮的方式:我定义一个IBAction为

  • 我连接到定制的细胞
  • 我定义委托和用于小区来处理委托方法内一个UIButton事件按钮动作
  • IBAction调用委托方法
  • 当在cellAtRow中定义单元格时...我将tableViewController设置为委托。 cell.delegate =自我;
  • 我的任何行动,我想该委托方法里面做的tableViewController

有道理?

+0

辉煌,谢谢!像魅力一样工作 –

+1

有没有办法通过这种委托方法获得该单元格的indexPath? – Isuru

+0

这是一个很好的问题Isuru,值得单独发布。这就是我现在正在扼杀我。 – rtcarlson

0

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

+0

这就是我正在做的。现在我想处理单元格上的点击操作 –

-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]); 
} 
相关问题