Malheureusement, cette méthode n'est appelée que si le type de bouton interne fourni lorsque vous utilisez l'un des types prédéfinis est touché. Pour utiliser le vôtre, vous devrez créer votre accessoire sous forme de bouton ou d'une autre sous-classe de UIControl (je recommanderais un bouton utilisant -buttonWithType:UIButtonTypeCustom
et de définir l'image du bouton, plutôt que d'utiliser un UIImageView).
Voici quelques éléments que j'utilise dans Outpost, qui personnalise suffisamment les widgets standard (juste un peu, pour correspondre à notre couleur sarcelle) pour que je finisse par créer ma propre sous-classe intermédiaire UITableViewController pour contenir le code utilitaire que toutes les autres vues de table doivent utiliser (elles sous-classent maintenant OPTableViewController).
Tout d'abord, cette fonction renvoie un nouveau bouton de divulgation des détails utilisant notre graphique personnalisé :
- (UIButton *) makeDetailDisclosureButton
{
UIButton * button = [UIButton outpostDetailDisclosureButton];
[button addTarget: self
action: @selector(accessoryButtonTapped:withEvent:)
forControlEvents: UIControlEventTouchUpInside];
return ( button );
}
Le bouton appelle cette routine lorsqu'il a terminé, ce qui alimente ensuite la routine standard UITableViewDelegate pour les boutons accessoires :
- (void) accessoryButtonTapped: (UIControl *) button withEvent: (UIEvent *) event
{
NSIndexPath * indexPath = [self.tableView indexPathForRowAtPoint: [[[event touchesForView: button] anyObject] locationInView: self.tableView]];
if ( indexPath == nil )
return;
[self.tableView.delegate tableView: self.tableView accessoryButtonTappedForRowWithIndexPath: indexPath];
}
Cette fonction localise la ligne en obtenant l'emplacement d'une touche dans la vue tableau à partir de l'événement fourni par le bouton et en demandant à la vue tableau le chemin d'index de la ligne à ce point.