Come posso personalizzare l'immagine di divulgazione degli accessori in un UITableViewCell?

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

  •  03-07-2019
  •  | 
  •  

Domanda

Vorrei utilizzare una versione personalizzata dell'immagine dell'accessorio di divulgazione standard nel mio UITableView. Come posso fare questo? Spero che la sottoclasse di UITableViewCell non sia necessaria per qualcosa di così semplice.

È stato utile?

Soluzione

Dovrai creare una vista personalizzata e assegnarla alla proprietà accessoriesView dell'oggetto UITableViewCell . Qualcosa del tipo:

myCell.accessoryView = [[ UIImageView alloc ] 
                       initWithImage:[UIImage imageNamed:@"Something" ]];

Altri suggerimenti

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

    UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"];
    cell.accessoryView =[[[UIImageView alloc]  initWithImage:indicatorImage] autorelease];


    return cell;
}

bene, lo faccio con il codice di aiuto fornito sopra

Ho riscontrato lo stesso problema di Greg: la vista degli accessori non tiene traccia (se usi UIImageView)

L'ho risolto in questo modo:

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

Esiste un bell'esempio di Apple che mostra come utilizzare UIControl per soddisfare questo tipo di personalizzazione di AccessViewView.

Ignorare - (void) drawRect: (CGRect) rect in UIControl non è il modo più semplice, ma ti dà molta flessibilità nello stile di belle viste accessorie.

inserisci qui la descrizione dell

Lo farei come segue:

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;

Per favore, prova questo prima di votare! Perché al momento ha 2 voti positivi e 2 negativi!

Ho provato il codice sopra e sembra non funzionare più, forse a causa dell'età di questo post, quindi getterò giù la mia riga che mi ha dato la vista degli accessori personalizzata.

[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]];

Spero che qualcuno lo trovi utile.

NOTA: NON impostare una cella personalizzata su tag: 0. Quel tag è riservato per la vista textLabel. Se imposti i tag nello Xcode Storyboard, devi impostare i tag per le viste / etichette personalizzate su 1 o superiore.

Nota l'esempio di 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;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top