2009-09-17 6 views
11

J'utilise un UIImageView en tant que accessoryView dans un UITableViewCell que je crée par programmation. J'ai essayé tout ce que je peux penser pour définir la propriété alpha de accessoryView, mais cela ne fonctionne pas. Je suis en mesure de définir les propriétés hidden et opaque sans aucun problème, mais alpha me déteste partout.Est-il possible de définir la propriété alpha d'un accessoireView de UITableViewCell?

J'ai essayé de créer un nouveau projet qui contient un seul UITableViewController et la méthode tableView:cellForRowAtIndexPath: suivante:

- (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; 
} 

Comme vous l'aurez deviné, le accessoryView est complètement opaque. Est-ce que je manque quelque chose? Je ne trouve aucune information sur ce qui se passe ici.

Merci!

+0

juste couru dans ce aussi après avoir joué avec lui pendant environ une demi-heure jusqu'à ce que j'ai abandonné. heureux de voir que je ne suis pas seul. : D merci de poster la solution de contournement. dommage cependant! – taber

+0

Ce n'est pas encore réglable dans iOS 5.1. J'ai aussi essayé de régler l'alpha de l'UIImageView avant de le définir comme accessoireView, mais cela n'a rien fait non plus. – arlomedia

Répondre

3

Après avoir essayé environ un milliard de choses différentes et partout à la recherche des réponses, je me suis retrouvé juste faire semblant en ajoutant un sous-vue à contentView de la cellule et son positionnement à la position accessoire. Je suis en mesure de définir la propriété alpha sur cette sous-vue au contenu de mon coeur.

+0

J'ai fini par faire quelque chose de similaire, sauf que j'ai cuit la transparence dans une image et continué à utiliser la vue accessoire. – Fostah

0

Avez-vous essayé de définir sa couleur d'arrière-plan pour effacer les couleurs? Quelque chose comme ceci:

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

Ouais; n'a pas aidé. : -/ –

0

Au moment où vous essayez de mettre accessoryView.alpha, vous pouvez placer ce code:

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]; 

Cela devrait bien fonctionner aussi longtemps que vos cellules ont un fond blanc ou noir plaine plaine. Vous pouvez définir votre masque pour qu'il corresponde à d'autres couleurs d'arrière-plan, mais votre accessoire sera alors teinté. L'avantage par rapport à l'ajout d'une sous-vue à contentView est que vous n'avez pas à vous soucier de positionner la vue; l'iOS positionnera l'accessoire au besoin et votre masque le suivra.

+0

N'a pas fonctionné pour moi .. – nemesis

2

vous pouvez modifier l'alpha dans - (void) layoutSubviews d'un UITableViewCell sous-classé par la mise

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

acclamations

+0

et si vous voulez le changer dans le temps d'exécution? – nemesis

5

Peut-être que vous pouvez le faire en willDisplayCell:

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

Merci! La chose que je cherchais. ;) – nemesis

+1

Merci! Dans mon cas, je cherchais plutôt 'cell.contentView.alpha'. – pimguilherme

+0

Cela ne semble pas fonctionner pour moi sur iOS 10. – Fostah

0

Peut-être en retard, mais une approche ce qui était pour moi au moins de travail était d'appliquer l'alpha directement à l'image de manière dynamique en utilisant cette méthode (comme catégorie ou assistant en classe):

- (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

view1 - la vue que vous souhaitez ajouter comme accessoire. Créez une vue2 de la même taille que view1. Ajoutez ensuite view1 en tant que sous-vue à view2 et définissez l'alpha de view1. Définissez view2 comme acessoryView pour la cellule tableview.

0

Vous pouvez changer la couleur de teinte - que les manipulations changent la couleur de accessotyView par défaut.cellulaire et sous-classe endroit où coloriser BOOL _myOption est changé ajouter quelque chose comme ceci:

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

Vous pouvez choisir une autre couleur, non seulement changer en valeur alpha.

Questions connexes