Objective c 目标c:如何找到UITableViewCell';s包含UITableView

Objective c 目标c:如何找到UITableViewCell';s包含UITableView,objective-c,uitableview,Objective C,Uitableview,我已经使用一些特定属性对UITableView进行了子类化,我希望能够在UITableViewCell的子类中访问这些属性。有没有像cell.containingTableView这样的东西我不知道?您可能会考虑使用 self.superview 但是它非常易碎,所以请不要 最好将对UITableView的引用显式传递给单元格 在单元格中声明一个属性 @property (nonatomic, weak) UITableView *parentTableView; 并在tableView:c

我已经使用一些特定属性对UITableView进行了子类化,我希望能够在UITableViewCell的子类中访问这些属性。有没有像cell.containingTableView这样的东西我不知道?

您可能会考虑使用

self.superview
但是它非常易碎,所以请不要

最好将对
UITableView
的引用显式传递给单元格

在单元格中声明一个属性

@property (nonatomic, weak) UITableView *parentTableView;
并在
tableView:cellforrowatinexpath:
数据源方法中分配它

最后,如果您的目的只是调用父控制器上的一些方法,那么您可以使用适当的委托模式并定义自己的协议

@protocol CellDelegate <NSObject>
- (void)aMethodThatINeedToCall:(id)whatever;
@end
你可以考虑使用

self.superview
但是它非常易碎,所以请不要

最好将对
UITableView
的引用显式传递给单元格

在单元格中声明一个属性

@property (nonatomic, weak) UITableView *parentTableView;
并在
tableView:cellforrowatinexpath:
数据源方法中分配它

最后,如果您的目的只是调用父控制器上的一些方法,那么您可以使用适当的委托模式并定义自己的协议

@protocol CellDelegate <NSObject>
- (void)aMethodThatINeedToCall:(id)whatever;
@end

你真的不想让你的观点对他们的父母了解太多。要做的事情是将UITableViewCell子类化,给它一些属性来保存要传递给它的信息,然后让UITableViewController在tableView:CellForRowatineXpath中执行此操作:

确实,您不想让视图了解有关其父视图的很多信息。要做的事情是将UITableViewCell子类化,给它一些属性来保存要传递给它的信息,然后让UITableViewController在tableView:cellForRowAtIndexPath:

中执行此操作。单元格的超级视图应该是表视图。但是一个单元格不需要访问它的表。创建单元格时将数据传递给单元格,或者使用委托模式,以便单元格可以向其委托人(表)请求所需的数据。您可能可以遍历
superview
链(不确定是否保证它是direct superview),但这是一种非常强烈的代码气味;如果你不得不问,你可能不应该这样做。单元格的超级视图应该是表视图。但是一个单元格不需要访问它的表。创建单元格时将数据传递给单元格,或者使用委托模式,以便单元格可以向其委托人(表)请求所需的数据。您可能可以遍历
superview
链(不确定是否保证它是direct superview),但这是一种非常强烈的代码气味;如果你不得不问的话,你可能不应该这么做。作为一个非常强烈的警告,
self.superview
几乎肯定最终会崩溃,我听到有传言说iOS 7可能已经修改了UITableView/UITVCell的视图层次结构。我已经说过它非常脆弱,但我会让它成为一个非常强烈的警告,
self.superview
几乎肯定最终会崩溃,我听到有人嘀咕说iOS 7可能修改了UITableView/UITVCell的视图层次结构。我已经说过它非常脆弱,但我会说得更清楚。我对单元格进行了子类化,并添加了一个指向tableview的属性。工作起来很有魅力!说得好。我对单元格进行了子类化,并添加了一个指向tableview的属性。工作起来很有魅力!