Customiser AccessoryView
Bonjour,
Je chercher à personnaliser le button accessory d'une tableView qui est par défaut un i dans un cercle. J'ai ajouter le code suivant :
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
// ...
cell.accessoryView = UIImageView(image: UIImage(named: "ARI")!)
//....
return cell
}
Cela change bien l'image mais
func tableView(tableView: UITableView, accessoryButtonTappedForRowWithIndexPath indexPath: NSIndexPath)
n'est jamais appelé :-(
Mots clés:
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Essaye imageView.userInteractionEnabled = true.
Merci de ton conseil, mais si ce que tu voulais dire c'est :
Le bouton reste sans effet
C'est parce que userInteractionEnabled est par défaut à false sur les UIImageView. C'est une question que je vois régulièrement sur StackOverFlow.
Après, si tu utilises Swift 3.0, voici la signature de la méthode de UITableViewDelegate :
Note qu'elle n'est pas identique à la tienne (y'a un under_score, et c'est accessoryButtonTappedForRowWith, pas accessoryButtonTappedForRowWithIndexPath), ce qui pourrait être lié à ce genre de questions. Je ne parle toujours pas Swift, mais j'ai vu pas mal de questions sur SO traitant de ce problème.
Non je suis sur Swift 2.2
Voilà ou j'en suis :
Cela fonctionne si je veux appeler testAri quand le bouton est pressé mais si je veux récupérer un paramètre par exemple avec testAirIndex(i: NSIndexPath) ça ne fonctionne pas.
Au mieux j'arrive à récupéré le sender (ariButton)
Y a-t-il un moyen de faire un selector avec des paramètres ?
Petite explication il me semble (j'viens de lire la doc de la méthode) :
Si j'ai bien tout compris, c'est donc normal que cela ne soit pas appelé.
Quelques idées, déclare ta méthode de cette manière (après traduction, obv) : -(IBAction)testAri:(UIButton *)sender
Et utilises le sender pour retrouver le NSIndexPath :
ou
Mais je ne suis pas fan de la deuxième méthode si y'avait il y a des changement de hiérarchie dans ce bazar...
Source http://stackoverflow.com/questions/16229488/how-to-get-the-indexpath-of-a-uibutton-in-a-uitableviewcell/32792880
Maintenant, si tu n'as qu'une seule section ou qu'une seule row par section, tu peux toujours utiliser button.tag = indexPath.row ou button.tag = indexPath.section dans l'autre cas (puisque l'intérêt est sûrement d'effectuer une action sur/depuis ton dataSource.
Si ton but est d'exécuter des instructions dans ton contrôller lorsqu'on appuie sur ton accessoryView alors la solution la plus efficace pour moi reste les blocks ou closures en swift.
Personnellement quand je configure une cellule j'évite de faire ça dans le cellForRowAtIndexPath mais plutôt dans la cellule personnalisée elle-même surtout si tu comptes la réutiliser. Dans cette cellule personnalisée tu ajoutes une propriété qui est une closure avec les paramètres souhaités. Tu appelles cette closures dans la méthode d'action liée à ton accessoryView qui doit se situer dans ta classe personnalisée.
Reste plus qu'à l'écouter dans ton cellForRowAtIndexPath