2013-02-16 4 views
1

J'ai un bouton de suppression dans une cellule UITableView. La fonction de ce bouton est de supprimer le contenu de cette cellule spécifique des données de base. Ce processus ne peut pas être annulé; J'ai donc ajouté UIAlertView pour permettre aux utilisateurs de confirmer leur décision avant de procéder à la suppression.Accéder à UITableViewCell depuis UIAlertView dans iOS

Il semble que je dois coder toute la logique de suppression à l'intérieur ...

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 

Cependant, ceci est une méthode déléguée. Le chemin d'index de la cellule de table est manquant? Comment accéder aux données UITableViewCell après avoir cliqué sur le bouton UIAlertView? Une des idées que j'ai en tête maintenant est de traverser en utilisant alertview.superview jusqu'à ce que je trouve UITableViewCell, et d'accéder à sa propriété indexPath. Mais cela ne semble pas être élégant. Devrait-il y avoir une autre façon de résoudre ce problème?

+0

vous utilisez la cellule personnalisée? – Dilip

+0

Utiliser l'objet associé –

+0

Il est de bonne pratique d'accepter les réponses si vous êtes satisfait –

Répondre

0

Parce que le UIAlertView est modal, je ne vois pas de problème à sauver la indexPath du UITableViewCell avant de présenter le UIAlertView dans une variable (globale) (et peut-être de compensation variable dans - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex (juste pour être du bon côté) . au moins ce que je faisais quand j'eu ce problème.

ps. Il est loin d'être les meilleures pratiques, mais aussi longtemps que vous faites quelques vérifications de base, vous devriez être ok.

+0

C'est aussi une autre bonne idée. Merci pour vos conseils. :) – Kann

2

Utilisez les objets associés. Il est décrit plus en détail ici Associated Objects

Pour définir l'objet que vous utilisez l'utilisation:

objc_setAssociatedObject(alert, &key, userCode, OBJC_ASSOCIATION_RETAIN); 

Et pour obtenir l'objet.

SOCode *userCode = objc_getAssociatedObject(alertView, &key); 

Ne jamais oublier d'importer <objc/runtime.h> et vous devez également ajouter static char key; de sorte qu'il est dans le champ d'application des deux méthodes.

Référence: Can a UIAlertView pass a string and an int through a delegate

+0

Pour plus d'informations, rendez-vous sur http://stackoverflow.com/questions/5439560/can-a-uialertview-pass-a-string-and-an-int-through-a-delegate –

+0

+1 Appris quelque chose de nouveau aujourd'hui. Merci.. –