143 votes

Utilisation d'une image personnalisée pour l'accessoryView d'un UITableViewCell et réponse à UITableViewDelegate

J'utilise un UITableViewCell dessiné de manière personnalisée, y compris la même chose pour les éléments de la cellule. accessoryView . Ma configuration pour le accessoryView se fait de la manière suivante :

UIImage *accessoryImage = [UIImage imageNamed:@"accessoryDisclosure.png"];
UIImageView *accImageView = [[UIImageView alloc] initWithImage:accessoryImage];
accImageView.userInteractionEnabled = YES;
[accImageView setFrame:CGRectMake(0, 0, 28.0, 28.0)];
self.accessoryView = accImageView;
[accImageView release];

De même, lorsque la cellule est initialisée, en utilisant initWithFrame:reuseIdentifier: J'ai veillé à définir la propriété suivante :

self.userInteractionEnabled = YES;

Malheureusement, dans mon UITableViewDelegate, mon tableView:accessoryButtonTappedForRowWithIndexPath: (essayez de répéter cela 10 fois) n'est pas déclenchée. Le délégué est certainement câblé correctement.

Que peut-il bien manquer ?

Merci à tous.

2voto

Eric Welander Points 305

Lorsque vous appuyez sur le bouton, vous pouvez faire en sorte qu'il appelle la méthode suivante dans une sous-classe de UITableViewCell

 -(void)buttonTapped{
     // perform an UI updates for cell

     // grab the table view and notify it using the delegate
     UITableView *tableView = (UITableView *)self.superview;
     [tableView.delegate tableView:tableView accessoryButtonTappedForRowWithIndexPath:[tableView indexPathForCell:self]];

 }

1voto

ikarius Points 355

Vous devez utiliser un UIControl pour obtenir correctement la répartition des événements (par exemple une UIButton ) au lieu de simples UIView/UIImageView .

1voto

Toydor Points 227

Avec l'approche de Yanchenko, je devais ajouter : [accBtn setFrame:CGRectMake(0, 0, 20, 20)];

Si vous utilisez un fichier xib pour personnaliser votre tableCell, initWithStyle:reuseIdentifier : ne sera pas appelé.

Au lieu de cela, il faut passer outre :

-(void)awakeFromNib
{
//Put your code here 

[super awakeFromNib];

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X