2009-08-14 6 views
0

Quelle est la meilleure façon d'avoir une liste d'éléments de texte, appuyez sur l'un et être en mesure de le modifier? Que diriez-vous d'aller dans une vue détaillée? Mais alors comment obtenez-vous votre changement dans l'UITableView?Comment faites-vous l'édition de liste/détail avec un UITableView?

Je suppose que tout cela pourrait être fait avec SQL ou CoreData mais comme UITableView est basé sur un tableau, pouvons-nous simplement éditer cet élément du tableau et réinitialiser la vue tabulaire? Finalement, je veux que les données soient persistantes, donc j'irai probablement avec CoreData ou SQL mais pour l'instant je veux juste aller d'une liste aux détails, éditer les détails, et revenir à la liste.

+0

Il y a plusieurs façons: contrôleur de navigation, vue modale, etc. –

+0

Oui, je cherche un échantillon spécifique. J'ai fait un UITableView qui mène à un détail UIView. Le texte sélectionné à partir de la table le fait dans un champ de texte dans la vue détaillée, mais je ne peux pas rééditer les modifications apportées à ce texte dans la vue tabulaire. Des idées concrètes quelqu'un? –

Répondre

0

"Mais alors, comment obtenez-vous vos modifications dans UITableView?" La vue de table et la vue détaillée doivent toutes deux accéder à un objet de modèle commun. En d'autres termes, la vue détaillée qui modifie les données n'a même pas besoin de savoir que la vue de table existe.

0

Rechercher des protocoles. Fondamentalement, vous avez une classe qui a des informations à partager. Dans ce cas, ce sera votre contrôleur de détail ou une sorte d'objet de données comme mentionné ci-dessus. Avoir cette classe (avec l'info à partager) déclarer un protocole qui utilise cette information. La méthode doit utiliser des paramètres pour filtrer vos informations. La classe déclare également un id (less than) protocole (supérieur à) délégué où "protocole" est ce que vous avez déclaré ci-dessus.

Maintenant dans cette classe lorsque vous obtenez les informations que vous souhaitez partager (quelle que soit la façon dont vous le faites), envoyez le message de méthode délégué à votre délégué. [delegate informationObtained:newInfo].

Pour la classe ou les classes qui ont besoin de cette information, implémentez la (les) méthode (s) protocolaire (s). Les informations dont vous avez besoin sont transmises par les paramètres de la méthode. C'est de la même manière que vous utilisez TextFieldDelegate et UIPickerFieldDelegate, seulement vous décidez du protocole et vous décidez comment les implémenter. Voici un exemple de code

En SpeakHereController.h

@protocol SpeakHereControllerDelegate 
-(void)newSoundCreated:(NSString *)newSoundName savedFile:(BOOL)savedFile element: (id)element; 
-(void)cancelNewSound; 
-(void)soundEdited; 
@end 

dans l'interface: délégué id; ne pas oublier la Dans le fichier de mise en œuvre @property faire (non atomique, assignez)

, une fois que j'ai les informations que je veux partager:

[self.delegate newSoundCreated:myFileName savedFile:self.savedFile element:self]; 

Maintenant, pour le contrôleur tableview que veut utiliser ces informations: dans le fichier .h déclarer que vous allez mettre en œuvre le protocole

@interface AlarmSoundsTableViewController : UITableViewController <SpeakHereControllerDelegate, UITableViewDataSource, UITableViewDelegate> 

Puis dans le fichier de mise en œuvre mettre en œuvre la méthode:

-(void)newSoundCreated:(NSString *)soundName savedFile:(BOOL)savedFile element:(id)element 
{ 

    [self setSoundFileName:soundName]; 
    ... 
Questions connexes