Question

Trier d'une simple question. J'ai un tableview dans un NavigationController. Quand je touche une cellule, il pousse un contrôleur de vue avec les informations de la cellule, afin que je puisse le modifier dans la nouvelle vue. Maintenant ce travail correct (on peut l'appeler le informationpath: "RootViewController -> poussé viewcontroller"). Mais quand je clique sur Enregistrer dans la nouvelle vue, je veux que les valeurs modifiées au dos de Voyage au RootViewController avant d'appeler popviewcontroller (informationpath: « poussé viewcontroller -> RootViewController »), de sorte que les valeurs modifiées peuvent être affichées dans le tableview.

Quelle est la bonne approche à cela?

EDIT:

pushViewController et popViewController travaille. Je ne ai demandé la meilleure approche pour obtenir le retour d'information éditée à l'RootViewController pour l'affichage dans le tableview, quand Save-bouton (popViewController) a été appelé. Je suppose que je vais devoir modifier le pList avec les nouvelles informations directement à partir du viewController poussé. Bien que je préférerais envoyer les nouvelles informations au RootViewController et avoir gérer l'accès au fichier pList.

Était-ce utile?

La solution

J'ai la même situation - deux tableviews. Les premiers écrans de télévision une liste des enregistrements de base de données et quand on le tapota passe par la seconde TableView qui affiche les détails de l'enregistrement. Je le fais en poussant les détails TableViewController sur la pile de contrôleurs de navigation. Jusqu'à présent, donc aller assez simple.

Le I problème rencontré est que, après la mise à jour du dossier dans la vue de la table de détails (contrôleur), je voulais laisser la vue table liste savoir contrôleur, afin qu'il puisse mettre à jour la liste des enregistrements.

La première chose que je faisais était d'ajouter une propriété au contrôleur de vue table détails de sorte que lorsqu'une ligne a été sélectionnée sur la liste des enregistrements, le contrôleur de liste pourrait transmettre les données de base entité gérée au contrôleur de détails.

En même temps, j'ai aussi ajouté le contrôleur de liste à titre d'observateur d'événements de changement de données fondamentales comme ceci:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

Donc, si la vue table et mise à jour du contrôleur détails du record, le contrôleur de liste a sa méthode de dataSaved: appelé, le passage d'un objet NSNotification.

Dans le procédé de dataSaved: I examiner l'objet et si l'entité de données de base en cours d'édition dans la liste est mise à jour, puis-je définir un indicateur pour signaler une mise à jour est nécessaire. Cependant, s'il y a un enregistrement dans la liste insérée, cela signifie qu'un nouveau record a été créé et inséré dans la base de données, un drapeau est réglé pour déclencher une recharge complète de la vue du tableau de la liste.

Lorsque l'utilisateur retourne à l'affichage de la liste de commande, le procédé de viewDidAppear: est déclenchée. Dans cette méthode, j'examine les drapeaux et soit appeler

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

pour recharger le dossier spécifique si l'enregistrement a été mis à jour, ou dire la vue de la table pour faire un rechargement complet s'il y a un insert d'un nouveau record.

Enfin je supprimer le contrôleur de liste à titre d'observateur des principales notifications de données, car il ne se intéresse plus.

Je ne sais pas si cela est la méthode recommandée pour ce faire, mais jusqu'à présent, il travaille pour moi.

Autres conseils

Vous pouvez essayer de reloadData avant popViewController mais vous devez poster un code.

Tous les UIViewControllers ont une méthode navigationController. Lorsque vous appuyez sur un contrôleur de vue à un contrôleur de navigation, cette propriété est définie pour pointer vers le contrôleur de navigation.

Alors, il suffit d'appeler [self.navigationController popViewControllerAnimated:YES]; dans le contrôleur de vue.

En outre, ne confondez pas vues et contrôleurs de vue. Lorsque vous cliquez sur Enregistrer dans la vue, vous devez vous assurer que le bouton Enregistrer appelle une méthode sur votre contrôleur de vue, qui parle à son tour au contrôleur de navigation.

En tapant une ligne Vous allez nouvelle vue avec les informations appropriées.

Ici, vous effectuez une opération telles que les données d'édition. Alors d'abord effectuer cette opération sur un clic sur le bouton Enregistrer (en appelant un IBAction) et cette méthode IBAction vérifiera wheter (les modifications sont enregistrées avec succès) puis appelez

[self.navigationController popViewControllerAnimated: OUI];

Et faire en sorte que reload table elle-même par databese mis à jour (pour ce tableau de changement de données en appelant la méthode de base de données dans la méthode viewWillAppear).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top