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

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