Estoy tratando de hacer una UITableViewCell subclasificada donde dibujo una imagen en la esquina superior derecha. Lo tengo funcionando perfectamente, excepto cuando configuro self.backgroundView, mi imagen de fondo cubre la imagen dibujada en drawRect.subclassed UITableViewCell - backgroundView cubre todo lo que hago en drawRect
Debe haber una manera de poder establecer una imagen de fondo (y el seleccionadoBackgroundView) sin cubrir lo que se está haciendo en drawRect.
¿Voy por esto de la manera incorrecta?
EDIT: He publicado un 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)];
}
EDIT 2: a petición del AWrightIV, así es como lo tengo trabajo ... que no requirió la subclasificación UITableViewCell en absoluto. Sólo estoy añadiendo una vista secundaria a cell.backgroundView:
// 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;
Por "vista de raíz de la celda", ¿te refieres a cell.contentView? Cuando he probado una UIView personalizada (o UIImageView) tengo problemas con el botón eliminar de la celda que empuja la vista hacia la izquierda. Estoy usando UIViewAutoresizingFlexibleLeftMargin en la vista personalizada, ya que estoy tratando de admitir el modo horizontal, y quiero que la imagen de la esquina de la estrella siempre se fije en la esquina superior derecha de la celda. (Además, necesito apoyar el modo de edición y el reordenamiento). –
Asegúrese de que su vista sea compatible con el protocolo de cambio de tamaño implementando el método layoutSubviews de la clase UIView. Este método se invocará con el nuevo tamaño si la UI gira, o si se está editando. Simplemente ajuste los límites de las subvistas o marcos allí. –
Descubrí cómo hacerlo sin crear subclases de UITableViewCell. Todo lo que necesitaba era crear un ImageView con la estrella, luego agregar eso como una subvista a un ImageView con la imagen de fondo de la celda, y finalmente asignar eso a mi cell.backgroundView (no a contentView). Entonces, gracias a Ben por alejarme de la solución drawRect y señalarme en la dirección correcta. Aprendí mucho, y ahora parece fácil en retrospectiva. –