0

我有一个UITableView由我自己的 custom 组成UITableViewCell的,子类为CustomCell. 我在UITextField该单元格中添加了一个方法,并且一个方法在某些事件上运行(来自文本字段)。

当这个方法运行时,我需要访问CustomCell文本字段是子视图的。

所以我想,我怎样才能访问文本字段的父视图(CustomCell)?

我试过这个,获取文本字段,方法的发送者,然后从中获取它的超级视图。

CustomTextField *textField = sender;
    CustomCell *cell = (CustomCell *)[textField superview];

但是这失败了,当我尝试访问我的单元格的属性时,应用程序崩溃了,我在控制台中得到了这个:[UIView myLabel]: unrecognized selector sent to instance. (myLabel是我试图在单元格上访问的属性。)

为什么这不起作用,或者是否有访问该单元格的替代方法?

4

1 回答 1

1

您不应该将您的视图添加为 a 的直接子视图UITableViewCell。相反,您应该将它们添加为单元格的子视图contentView。如果你在 xib 中布置你的单元格,Interface Builder 会自动为你处理这些。所以一般来说,你不应该期望单元格是你的文本字段的直接超级视图。

我将通过以下两种方式之一处理此问题:

  1. 给出CustomTextField一个引用其包含的弱属性CustomCell。然后,您可以只向文本字段询问其单元格。如果您使用的是 xib,请将属性设置为 anIBOutlet并将其连接到 xib。如果您在代码中创建单元格,请在创建单元格和文本字段时在代码中设置属性。

  2. 沿着视图层次结构寻找CustomCell祖先。

    CustomCell *cell = textField.superview;
    while (cell && ![cell isKindOfClass:[CustomCell class]]) {
        cell = [cell superview];
    }
    
于 2012-11-21T20:16:19.107 回答