Comment personnaliser l'image de divulgation d'accessoire dans une UITableViewCell?

StackOverflow https://stackoverflow.com/questions/403748

  •  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.

Était-ce utile?

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.

entrer la description de l'image ici

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;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top