我正在尝试制作一个子类化的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/

10-12 22:27