2014-10-04 67 views
0

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

这在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]; 
} 
+3

更好的方法是搜索按钮的超级视图直到找到该单元格。看看我的答案在这里,http://stackoverflow.com/questions/22949304/get-uitableviewcell-of-uibutton/22950960#22950960 – rdelmar 2014-10-04 22:23:55

+0

奇怪我得到'属性'superview'找不到类型的对象'__strong id' 'on'superView = sender.superview',这是没有道理的,因为它不知道它是什么类,它怎么知道它做了什么和没有? – 2014-10-05 12:59:34

回答

2

你可以子类的UIButton到myButton的,并添加这样一个属性:

@property (nonatomic, weak) UITableViewCell *parentCell; 

然后,当你从小区集中parentCell =自

从那里建立的UIButton你可以简单地通过以下方式访问单元:

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

确保使用弱属性,创建一个保留周期。

+0

这工作完美。谢谢。 – 2014-10-05 14:06:12