Comment personnaliser l'image de divulgation d'accessoire dans une UITableViewCell?
-
03-07-2019 - |
Question
J'aimerais utiliser une version personnalisée de l'image accessoire de divulgation standard dans mon UITableView. Comment puis-je faire ceci? J'espère que la sous-classification UITableViewCell n'est pas nécessaire pour quelque chose d'aussi basique.
La solution
Vous devez créer une vue personnalisée et l'affecter à la propriété accessoriesView
de l'objet UITableViewCell
. Quelque chose comme:
myCell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"Something" ]];
Autres conseils
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"];
cell.accessoryView =[[[UIImageView alloc] initWithImage:indicatorImage] autorelease];
return cell;
}
bien je fais cela avec le code d'aide donné ci-dessus
J'ai rencontré le même problème que Greg - la vue des accessoires ne suit pas (si vous utilisez un UIImageView)
Je l'ai résolu comme ça:
UIImage * image = [ UIImage imageNamed:@"disclosure-button-grey.png" ] ;
UIControl * c = [ [ UIControl alloc ] initWithFrame:(CGRect){ CGPointZero, image.size } ] ;
c.layer.contents = (id)image.CGImage ;
[ c addTarget:self action:@selector( accessoryTapped: ) forControlEvents:UIControlEventTouchUpInside ] ;
cell.accessoryView = c ;
[ c release ] ;
Il existe un bel exemple d'Apple . montrant comment utiliser UIControl
pour réaliser ce type de personnalisation d'accessoires.
Remplacer - (void) drawRect: (CGRect) rect
dans UIControl n’est pas le moyen le plus simple, mais vous offre une grande flexibilité pour créer de jolies vues accessoires.
Je le ferais comme suit:
UIImageView *chevronImgVw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron_accessory_vw_img.png"]];
chevronImgVw.frame = CGRectMake(cell.accessoryView.frame.origin.x, cell.accessoryView.frame.origin.y, 10, 20);
cell.accessoryView = chevronImgVw;
S'il vous plaît, essayez ceci avant de voter par terre! Parce qu’à l’heure actuelle, il a 2 votes positifs et 2 votes négatifs!
J'ai essayé le code ci-dessus et il ne semble plus fonctionner, peut-être en raison de l'âge de ce billet. Je vais donc jeter ma ligne qui m'a donné la vue des accessoires personnalisée.
[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]];
J'espère que quelqu'un trouvera cela utile.
REMARQUE: Ne définissez PAS une cellule personnalisée sur la balise: 0. Cette balise est réservée à la vue textLabel. Si vous définissez des balises dans Xcode Storyboard, vous devez définir des balises pour les vues / étiquettes personnalisées de 1 ou plus.
Notez l'exemple d'Apple:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath
{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"];
UILabel *label;
label = (UILabel *)[cell viewWithTag:1];
label.text = [NSString stringWithFormat:@"%d", indexPath.row];
label = (UILabel *)[cell viewWithTag:2];
label.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row];
return cell;
}