从自定义单元格访问父视图

Posted

技术标签:

【中文标题】从自定义单元格访问父视图【英文标题】:Access parent view from custom cell 【发布时间】:2011-02-24 07:17:08 【问题描述】:

如何从该表中的自定义单元格访问我拥有 UITableView 的 UIView。我找不到这样做的方法。 谢谢

【问题讨论】:

【参考方案1】:

您可以添加一个指向 UITableView 的实例变量,并在创建/配置单元格时设置它(例如在 tableView:cellForRowAtIndexPath: 中)。确保您的单元格不保留 tableView。 知道了你的cell的tableView,调用[parentTableView superView]来访问UITableView的父视图:

@interface PropertyListingCell : UITableViewCell 
    __weak id    parentTableView;


- (void) setParentTableView:(UITableView*)tv; // parentTableView = tv;

在 UITableViewController 实现中:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

    //dequeue/create and configure your custom cell here

    [cell setParentTableView:tableView];
    return cell;
  

更新:

如果您使用的是最近的 XCode(至少 4.3),您可以简单地添加

@property (weak) UITableView *parentTableView; // use unsafe_unretained instead of weak if you're targeting ios 4.x

到 UITableViewCell 子类的 @interface 部分。然后,当您创建单元格时(在tableView:cellForRowAtIndexPath: 中)相应地设置此属性:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
    // ...
    //dequeue/create and configure your custom cell here
    // ...
    cell.parentTableView = tableView;
    return cell;

然后在你的单元格类中调用self.parentTableView 来访问这个单元格所属的tableView。

【讨论】:

感谢您的回复,但您能向我解释一下这是怎么回事 --------- @interface PropertyListingCell : UITableViewCell __weak id parentTableView; - (void) setParentTableView:(UITableView*)tv; // parentTableView = tv; 顶部块中的代码显示了您必须添加到自定义 UITableViewCell 头文件(例如 MyTableViewCell.h)的内容。 (id) parentTableView; 基本上是一个指向自定义表格单元格实现中的tableView 的指针。 setParentTableView 是一种将指针设置为表格视图的方法 - 您应该将其添加到自定义表格单元格实现中(例如 MyTableViewCell.m)。现在,当您在 UITableViewController 子类中创建自定义单元格的实例时,您调用单元格的 setParentTableView 方法并设置指向该单元格所属的 UITableView 的指针。

以上是关于从自定义单元格访问父视图的主要内容,如果未能解决你的问题,请参考以下文章

从自定义表格视图单元格获取数据到另一个 VC?

从自定义单元格 iPhone 中的 textField 获取值

从自定义单元格重新加载表格视图数据

从自定义表格视图单元格类加载时如何调整单元格的高度?

将数据从自定义表格视图单元格传递到 UIView 控制器

无法从自定义表格视图单元格按钮中删除行