2010-07-13 3 views
0

J'ai un UITableViewController et dans la méthode didSelectRowAtIndexPath je crée une instance d'un UIViewController et je l'enfonce dans la pile.UITableViewController -> EditView - flux de données

Le contrôleur UIViewController est destiné à modifier le contenu de la cellule sélectionnée, mais comment transférer les modifications effectuées dans ViewController vers TableViewController?

Vive

Répondre

0

La manière standard de transmettre des données dans la hiérarchie est la délégation ou, plus simplement, l'interrogation d'une propriété sur le contrôleur de vue d'édition lorsque vous souhaitez récupérer les données modifiées. Maintenant, quand il s'agit d'éditer les contrôleurs de vue, vous pouvez les concevoir pour prendre en charge à la fois l'édition directe d'objets 'live', ou une copie qui vous permettra de faire un modèle Save/Cancel.

Donc, ce que vous voulez, c'est que votre contrôleur de vue d'édition édite une sorte d'instance ModelObject avec diverses propriétés. Ces propriétés correspondent aux champs de texte ou aux sélecteurs de date, etc. dans la vue. Donc, vous pourriez avoir un Person avec NSDate *dateOfBirth et NSString *name.

Lorsque vous créez le contrôleur de vue et que vous le poussez sur le contrôleur de navigation, vous lui donnez l'un de ces ModelObject s à modifier. Vous pouvez soit transmettre un objet directement à partir de votre modèle qui sera édité «en direct» lorsque l'utilisateur entre des valeurs, ou une copie qui vous permettra de rejeter les modifications et d'implémenter un flux de travail Enregistrer ou Annuler. Pour ce dernier, vous pouvez ajouter vous-même les boutons Enregistrer et Annuler avant de pousser la vue d'édition qui vous permet de gérer les actions vous-même sans avoir besoin de délégation. Par conséquent, votre contrôleur d'édition modifiera les propriétés de cet objet lorsque l'utilisateur saisira une nouvelle valeur dans un champ de texte ou modifiera le sélecteur de date. Pour un objet en direct, ces modifications seront appliquées immédiatement à votre modèle. Pour une copie, lorsque l'utilisateur clique sur Enregistrer, vous interrogez le contrôleur de vue d'édition pour l'objet que vous avez transmis et vous le fusionnez/copiez dans votre modèle. Si l'utilisateur clique sur annuler, il vous suffit de rejeter l'objet.

0

Remplacer le « parent » ou d'une table vue méthode de -viewWillAppear: contrôleur et recharger la vue de la table il y a des données, en utilisant [tableView reloadData];.

Lorsque vous revenez au contrôleur de vue de table à partir du contrôleur de vue d'édition, la méthode -viewWillAppear: du contrôleur de vue de table recharge les données, qui à son tour appelle les méthodes de délégation de vue de table.

+0

Oui, mais comment puis-je lier les données? Dans le tableviewcontroller didSelectRowAtIndexPath, je crée une instance de uiviewcontroller puis j'accède aux propriétés, puis j'appuie le uiviewcontroller sur la pile. Le uiviewcontroller a maintenant les données du tableviewcontroller mais comment allons-nous dans l'autre sens? – mbogh

+0

Comment cela est fait dépend de la façon dont vous configurez votre contrôleur de table. Mais vous pouvez conserver le modèle en tant que propriété de vue de table que votre vue de table et vos contrôleurs de vue d'édition peuvent accéder et manipuler.Le tutoriel Core Data d'Apple couvre une approche qui utilise des données de base, mais l'idée est la même: http://developer.apple.com/iphone/library/documentation/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html –

0

Vous devez vous assurer que les deux contrôleurs partagent des données. L'option la plus simple consiste à faire passer le premier contrôleur dans le tableau (ou seulement l'objet sélectionné) sélectionné dans la table. La deuxième vue modifierait alors directement ce tableau (ou objet unique), puis, lorsque vous rejetez la deuxième vue affichera les données modifiées.

Vous devrez peut-être recharger la table.

Est-ce logique?

+0

Ouais mais est comment je leur fais partager des données que je ne peux pas enrouler ma tête autour de l'atm ... – mbogh

+0

Vous ne savez pas comment déclarer des propriétés dans une classe et comment les définir? – willcodejavaforfood

Questions connexes