自定义UITableViewCell子类

时间:2010-03-02 21:12:28

标签: iphone objective-c uitableview

我想创建一个自定义UITableViewCell,它应该具有与默认实现不同的外观。为此,我将UITableViewCell子类化,并希望添加标签,文本框和背景图像。似乎没有出现背景图像。 也许我在这里完全走错了路,也许继承一个UITableViewCell毕竟是一个坏主意,有没有理由为什么会出现这种情况并有更好的方法?

无论如何这就是我尝试过的,在子类的initWithStyle中我提出了以下内容:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier 
{
    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];

    if (self == nil)
    { 
        return nil;
    }

     UIImage *rowBackground;

     backRowImage = [UIImage imageNamed:@"backRow.png"];
     ((UIImageView *)self.backgroundView).image = backRowImage;

 }

我在这里做错了什么?我是否应该在drawRect方法中设置背景图像?

3 个答案:

答案 0 :(得分:4)

当我继承UITableViewCell时,我覆盖layoutSubviews方法,并使用CGRects将我的子视图放在单元格的contentView内,如下所示:

首先,在您的initWithFrame方法中:

-(id) initWithFrame:(CGRect)frame reuseIdentifier:(NSString *)reuseIdentifier {
    if (self = [super initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reuseIdentifier]) {
        //bgImageView is declared in the header as UIImageView *bgHeader;
        bgImageView = [[UIImageView alloc] init];
        bgImageView.image = [UIImage imageNamed:@"YourFileName.png"];

        //add the subView to the cell
        [self.contentView addSubview:bgImageView];
        //be sure to release bgImageView in the dealloc method!
    }
    return self;
}

然后你覆盖layoutSubviews,就像这样:

-(void)layoutSubviews {
    [super layoutSubviews];
    CGRect imageRectangle = CGRectMake(0.0f,0.0f,320.0f,44.0f); //cells are 44 px high
    bgImageView.frame = imageRectangle;
}

希望这适合你。

答案 1 :(得分:1)

根据头文件,对于普通样式表,backgroundView默认为nil。您应该尝试创建自己的UIImageView并将其粘贴在那里。

答案 2 :(得分:0)

我注意到使用initWithStyle,根据您使用的样式,有时会阻止您修改单元格中默认UILabel的某些属性,例如框架或文本对齐方式。您可能希望简单地为单元格覆盖不同的init方法,然后手动添加新的UILabel。这就是我为任何彻底定制的UITableViewCell子类做的。