我想创建一个自定义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
方法中设置背景图像?
答案 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
子类做的。