Como posso personalizar a imagem de divulgação acessório em um UITableViewCell?

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

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

Foi útil?

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.

enter descrição da imagem aqui

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;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top