2009-09-17 12 views
11

Estoy usando un UIImageView como accessoryView en un UITableViewCell que estoy creando mediante programación. He intentado todo lo que se me ocurre para establecer la propiedad accessoryView de alpha, pero no está funcionando. Puedo establecer las propiedades hidden y opaque sin problemas, pero alpha me está odiando.¿Es posible establecer la propiedad alpha de un accesorio UITViewViewCell?

intenté crear un nuevo proyecto que contiene una sola UITableViewController y la tableView:cellForRowAtIndexPath: método siguiente:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { 

    static NSString *CellIdentifier = @"Cell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 

    cell.textLabel.text = @"Cell"; 

    UIImageView *iv = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"image.png"]]; 
    cell.accessoryView = iv; 
    [iv release]; 

    // cell.accessoryView.hidden = YES; // works 
    cell.accessoryView.alpha = 0.5f; // fails 

    return cell; 
} 

Como habrán adivinado, el accessoryView es totalmente opaco. ¿Me estoy perdiendo de algo? No puedo encontrar ninguna información sobre lo que está pasando aquí.

Gracias!

+0

acaba de toparse con esto también después de jugar con él durante aproximadamente media hora hasta que me rendí. Me alegra ver que no estoy solo. : D gracias por publicar la solución. ¡qué fastidio! – taber

+0

Esto todavía no se puede configurar en iOS 5.1. También intenté configurar el alfa del UIImageView antes de configurarlo como el accesorioView, pero eso tampoco hizo nada. – arlomedia

Respuesta

3

Después de probar unos mil millones de cosas diferentes y buscando por todas partes para algunas respuestas, Acabé fingiendo añadiendo una vista secundaria a contentView de la célula y su posicionamiento a la posición de accesorios. Puedo establecer la propiedad alfa en esa subvista en el contenido de mi corazón.

+0

Terminé haciendo algo similar, excepto que horneé la transparencia en una imagen y seguí usando la vista de accesorios. – Fostah

0

¿Intentó también establecer el color de fondo para borrar el color? Algo como esto:

cell.accessoryView.backgroundColor = [UIColor clearColor]; 
+0

Sí; no ayudó. : -/ –

0

En el punto en que está tratando de establecer accessoryView.alpha, puede colocar este código:

UIView *accessoryMask = [[UIView alloc] initWithFrame:cell.accessoryView.frame]; 
accessoryMask.backgroundColor = [UIColor blackColor]; // or whiteColor 
accessoryMask.alpha = 0.5; 
accessoryMask.userInteractionEnabled = FALSE; 
[cell.accessoryView addSubview:accessoryMask]; 
[accessoryMask release]; 

Esto debería funcionar bien siempre que sus células tienen un fondo en blanco y negro o liso liso. Puede configurar su máscara para que coincida con otros colores de fondo, pero entonces su accesorio ViewView estará tintado.

La ventaja de agregar una subvista a contentView es que no tiene que preocuparse por posicionar la vista; el iOS posicionará el accesorioView como sea necesario y tu máscara lo seguirá.

+0

No funcionó para mí ... – nemesis

2

puede cambiar el alfa en - (void) layoutSubviews de un UITableViewCell subclase estableciendo

- (void) layoutSubviews 
{ 
    self.accessoryView.alpha = 0.4; 
} 

aplausos

+0

y si quieres cambiarlo en el tiempo de ejecución? – nemesis

5

Tal vez puede hacer que en willDisplayCell:

-(void) tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    cell.accesoryView.alpha = 0.4; 
} 
+0

Gracias! Lo que estaba buscando. ;) – nemesis

+1

¡Gracias! En mi caso, estaba buscando 'cell.contentView.alpha' en su lugar. – pimguilherme

+0

Esto no parece funcionar para mí en iOS 10. – Fostah

0

Tal vez tarde, pero un enfoque lo cual fue para mí, al menos, el trabajo fue aplicar el alfa directamente a la imagen de forma dinámica mediante el uso de este método (como categoría o ayudante en clase):

- (UIImage *)imageByApplyingAlpha:(CGFloat)alpha toImage:(UIImage *)initialImage 
{ 
    UIGraphicsBeginImageContextWithOptions(initialImage.size, NO, 0.0f); 

    CGContextRef ctx = UIGraphicsGetCurrentContext(); 
    CGRect area = CGRectMake(0, 0, initialImage.size.width, initialImage.size.height); 

    CGContextScaleCTM(ctx, 1, -1); 
    CGContextTranslateCTM(ctx, 0, -area.size.height); 

    CGContextSetBlendMode(ctx, kCGBlendModeMultiply); 

    CGContextSetAlpha(ctx, alpha); 

    CGContextDrawImage(ctx, area, initialImage.CGImage); 

    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext(); 

    UIGraphicsEndImageContext(); 

    return newImage; 
} 
0

vista1 - la vista que desea agregar como accesorio. Crea una vista2 con el mismo tamaño que view1. A continuación, agregue view1 como subvista a view2, y configure el alfa de view1. Establezca view2 como acessoryView para la celda tableview.

0

Puede cambiar el color del tinte: las manipulaciones cambian el color del acceso predeterminado a View.subclase de células y en su lugar cuando se cambia colorear BOOL _myOption añadir algo como esto:

self.tintColor = [self.window.tintColor colorWithAlphaComponent:_myOption?1.0:0.5]; 

Usted puede elegir cualquier otro color, no sólo cambiarlo por el valor alfa.

Cuestiones relacionadas