访问Subclassed Superview?

时间:2012-11-21 20:06:35

标签: iphone objective-c subclass subview superview

我有一个UITableView,它由我自己的自定义UITableViewCell组成,子类为CustomCell。我向该单元格添加UITextField,并且某个方法(从文本字段)运行方法。

当此方法运行时,我需要访问文本字段为子视图的CustomCell

所以我想,如何访问文本字段的父视图(CustomCell)?

我试过这个,得到文本字段,方法的发送者,然后从那里得到它的超级视图。

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

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

任何帮助解决为什么这不起作用或者访问该单元格的替代方法将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:1)

您不应将自己的观点添加为UITableViewCell的直接子视图。相反,您应该将它们添加为单元格contentView的子视图。如果您在xib中布置单元格,Interface Builder将自动为您处理此问题。因此,一般来说,您不应期望单元格是文本字段的直接超级视图。

我会用以下两种方式之一处理这个问题:

  1. CustomTextField提供引用其包含CustomCell的弱属性。然后你可以问文本字段的单元格。如果您正在使用xib,请将该属性设为IBOutlet并将其连接到xib中。如果您在代码中创建单元格,请在创建单元格和文本字段时在代码中设置属性。

  2. 向上走视图层次结构,寻找CustomCell祖先。

    CustomCell *cell = textField.superview;
    while (cell && ![cell isKindOfClass:[CustomCell class]]) {
        cell = [cell superview];
    }