正确地对UITableViewCell进行子类化?

时间:2010-07-30 04:13:19

标签: iphone objective-c cocoa-touch uitableview

将子视图添加到自身和/或内容视图之间有什么区别?

Subview添加到自己

- (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) {
    UIImage *img = [UIImage imageNamed:@”lol.jpg”]; 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:img]; 
    [self addSubview:imgView];
    [imgView release]; 
    return self;
}

Subview已添加到contentView

- (id)initWithFrame:(CGRect)frame { if ((self = [super initWithFrame:frame])) {
    UIImage *img = [UIImage imageNamed:@”lol.jpg”]; 
    UIImageView *imgView = [[UIImageView alloc] initWithImage:img]; 
    [self.contentView addSubview:imgView];
    [imgView release]; 
    return self;
}

3 个答案:

答案 0 :(得分:25)

根据Apple docs

  

UITableViewCell对象的内容视图是单元格显示的内容的默认超级视图。如果您想通过简单地添加其他视图来自定义单元格,则应将它们添加到内容视图中,以便在单元格进入和退出编辑模式时将它们正确定位。

通常,当您对通过自动调整大小设置处理的内容的大小调整和定位感到满意时,可以添加到contentView,并在需要某些自定义行为等时使用UITableViewCell子类。 Apple Table View编程指南在customizing UITableViewCells上有一个很棒的部分。

答案 1 :(得分:0)

您应该始终将自定义视图插入单元格contentView。请确保您不使用

cell.textLabel?.text 

答案 2 :(得分:0)

因为当tableviewcell进入编辑模式时,它会将其他控件(如删除按钮)添加到单元格中。因此,您的内容应调整大小,以便为新控件腾出空间。如果将子视图直接添加到tableviewcell,则这些编辑控件会遮盖您添加的子视图。进入编辑模式时,单元格无法调整其大小(必须保持表格视图的宽度)。但是contentView对象可以和它一样。这就是你应该将你的子视图添加到contentView对象的原因。