Como posso personalizar a imagem de divulgação acessório em um UITableViewCell?
-
03-07-2019 - |
Pergunta
Eu gostaria de usar uma versão personalizada da imagem de divulgação acessório padrão em meu UITableView. Como posso fazer isso? Eu estou esperando que sub-classificar UITableViewCell não é necessário para algo tão básico.
Solução
Você vai precisar para criar uma exibição personalizada e atribuí-lo à propriedade accessoryView
do objeto UITableViewCell
. Algo como:
myCell.accessoryView = [[ UIImageView alloc ]
initWithImage:[UIImage imageNamed:@"Something" ]];
Outras dicas
- (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"];
cell.accessoryView =[[[UIImageView alloc] initWithImage:indicatorImage] autorelease];
return cell;
}
Bem, eu fazer isso com o código ajuda dada acima
Eu corri para o mesmo problema que Greg - a visão acessório não controla (se você usar um UIImageView)
Eu resolvi assim:
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 ] ;
Há um bom exemplo da Apple mostrando como usar UIControl
para cumprir esse tipo de accessoryView personalização.
Substituir - (void)drawRect:(CGRect)rect
em UIControl não é a maneira mais fácil, mas dá-lhe muita flexibilidade para vistas acessório agradável estilo.
Eu faria isso da seguinte forma:
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;
Por favor, tente isso antes de descer voto! Porque no momento em que tem 2 upvotes e 2 downvotes!
Eu tentei o código acima e não parece mais trabalhar, talvez devido à idade deste post, então eu vou jogar para baixo a minha linha que me deu a vista acessório personalizado.
[cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]];
Hope alguém acha isso útil.
NOTA: não definir uma célula personalizado para tag: 0. Essa tag é reservado para a vista textLabel. Se você definir as tags no Xcode Storyboard, você deve definir tags para vistas personalizadas / etiquetas para 1 ou superior.
exemplo Nota da 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;
}