我正在尝试制作一个子类化的UITableViewCell,在其中我在右上角绘制图像。我可以完美地工作-除非设置了self.backgroundView,否则我的背景图像掩盖了用drawRect绘制的图像。
必须有一种方法能够设置背景图像(和selectedBackgroundView)而不会掩盖drawRect中的工作。
我会以错误的方式处理吗?
编辑:我已经发布了example project with the problem。
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier {
if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier])) {
// TODO: figure out why this covers up self.starImage that's drawn in drawRect
self.backgroundView = [[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellBackground.png"]] autorelease];
}
return self;
}
- (void)drawRect:(CGRect)rect {
[self.starImage drawAtPoint:CGPointMake(self.bounds.size.width - self.starImage.size.width, 0.0)];
}
编辑2:在AWrightIV的要求下,这就是我的工作方式...根本不需要继承UITableViewCell。我只是向cell.backgroundView添加一个 subview :
// create a UIImageView that contains the background image for the cell
UIImageView *bgImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellBackground.png"]];
// create another UIImageView that contains the corner image
UIImage *starRedImage = [UIImage imageNamed:@"starcorner_red.png"];
UIImageView *starImageView = [[UIImageView alloc] initWithFrame:CGRectMake(297,
0,
starRedImage.size.width,
starRedImage.size.height)];
starImageView.image = starRedImage;
// add the corner UIImageView as a subview to the background UIImageView
[bgImageView addSubview:starImageView];
// set cell.background to use the background UIImageView
cell.backgroundView = bgImageView;
最佳答案
实际上,您不应该像这样将图形与单元格混合,操作的级别比UITableViewCell机械的操作级别低,这就是为什么出现此问题的原因。
这只是您最终会遇到的各种问题之一。沿着这条道路,您会遇到其他问题,包括选择方式的问题。
正确的方法是创建一个自定义UIView,其中包含要绘制的代码,然后可以将SubView添加到单元格的根 View 中。这样可以按照正确的顺序进行渲染,并且不会干扰选择系统,并且在这种情况下可以正常工作。
关于iphone - 子类化的UITableViewCell-backgroundView涵盖了我在drawRect中所做的所有操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3527925/