从IBAction获取对UITableViewCell的引用?

时间:2014-10-04 21:59:14

标签: ios objective-c cocoa-touch uitableview ios8

我有一个tableview,它在自定义UITableViewCell中使用UIButton,在我的视图控制器中触发IBAction。在IOS7中,我能够通过执行此UITableViewCell *clickedCell = (UITableViewCell *)[[[sender superview] superview]superview]来引用触发操作的特定单元格。

这在iOS7中运行良好,但是在iOS8中它需要删除superview之一以返回单元格,否则返回nil。所以我现在就这样做,并且它有效,但我想知道是否有更清洁的方法来实现它。我只是不喜欢这种样子。

 UITableViewCell *clickedCell;

if (SYSTEM_VERSION_LESS_THAN(@"8.0")) {
     clickedCell = (UITableViewCell *)[[[sender superview] superview]superview];
}
else{
     clickedCell = (UITableViewCell *)[[sender superview]superview];
}

1 个答案:

答案 0 :(得分:2)

您可以将UIButton子类化为MYButton并添加如下属性:

@property (nonatomic, weak) UITableViewCell *parentCell;

然后,当您从单元格集parentCell = self

设置UIButton时

从那里你可以通过以下方式访问单元格:

MYButton *button = (MYButton *)sender;
clickedCell = sender.parentCell.

确保使用弱属性,这样就不会创建保留周期。