J'utilise un UITableViewCell dessiné personnalisé, y compris le même pour la cellule accessoryView
. Ma configuration pour l'accessoireView se produit par le biais de quelque chose comme ceci:
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];
Aussi lorsque la cellule est initialisée, en utilisant initWithFrame:reuseIdentifier:
je me suis assuré de définir la propriété suivante:
self.userInteractionEnabled = YES;
Malheureusement, dans mon UITableViewDelegate, ma tableView:accessoryButtonTappedForRowWithIndexPath:
méthode (essayez de répéter cela 10 fois) ne se déclenche pas. Le délégué est définitivement câblé correctement.
Qu'est-ce qui peut éventuellement manquer?
Merci a tous.
self.tableView
. que faire si vous ne savez pas quelle vue de table contient la ligne?J'ai trouvé ce site Web très utile: vue des accessoires personnalisés pour votre uitableview sur iPhone
En bref, utilisez ceci dans
cellForRowAtIndexPath:
:puis, implémentez cette méthode:
la source
Mon approche consiste à créer une
UITableViewCell
sous-classe et à encapsuler la logique qui appellera laUITableViewDelegate
méthode habituelle en son sein.la source
button.superview
,cell.superview
et[tableView.delegate tableView:...]
ne sont pas assez sûrs.Une extension de la réponse de Jim Dovey ci-dessus:
Soyez prudent lorsque vous utilisez un UISearchBarController avec votre UITableView. Dans ce cas, vous souhaitez rechercher
self.searchDisplayController.active
et utiliser à laself.searchDisplayController.searchResultsTableView
place deself.tableView
. Sinon, vous obtiendrez des résultats inattendus lorsque searchDisplayController est actif, en particulier lorsque les résultats de la recherche défilent.Par exemple:
la source
Définissez une macro pour les balises des boutons:
Créer un bouton et définir le cell.accessoryView lors de la création d'une cellule
Définissez cell.accessoryView.tag par indexPath dans la méthode UITableViewDataSource -tableView: cellForRowAtIndexPath:
Gestionnaire d'événements pour les boutons
Implémenter la méthode UITableViewDelegate
la source
tag
sauf si c'est absolument nécessaire, recherchez une autre solution.Lorsque vous appuyez sur le bouton, vous pouvez lui faire appeler la méthode suivante dans une sous-classe UITableViewCell
la source
Avec l'approche yanchenko, j'ai dû ajouter:
[accBtn setFrame:CGRectMake(0, 0, 20, 20)];
Si vous utilisez un fichier xib pour personnaliser votre tableCell, initWithStyle: reuseIdentifier: ne sera pas appelé.
Remplacez plutôt:
la source
Vous devez utiliser a
UIControl
pour obtenir correctement la répartition des événements (par exemple aUIButton
) au lieu de simpleUIView/UIImageView
.la source
Swift 5
Cette approche utilise
UIButton.tag
pour stocker l'indexPath à l'aide du décalage de bits de base. L'approche fonctionnera sur les systèmes 32 et 64 bits tant que vous n'avez pas plus de 65535 sections ou lignes.la source
À partir d'iOS 3.2, vous pouvez éviter les boutons que d'autres recommandent ici et utiliser à la place votre UIImageView avec un outil de reconnaissance de gestes. Assurez-vous d'activer l'interaction de l'utilisateur, qui est désactivée par défaut dans UIImageViews.
la source