Recharger UITableView lors de la navigation de retour?
J'ai un haut niveau UIViewController
qui contient un UITableView
. Le haut niveau de UIViewController
instancie un NavigationController
, et pousse un autre UIViewController
sur le NavigationController
. I. E. nous pousser dans une nouvelle, la seconde vue. Ce deuxième point de vue a l'habitude bouton "Retour" dans le coin supérieur gauche de vous permettre de naviguer en arrière au niveau le plus haut de la vue.
Est-il possible, lors de la navigation de retour vers le haut du niveau de la vue à partir de la seconde vue, pour redessiner la UITableView
dans le haut niveau, en utilisant les données générées dans le second point de vue, en appelant cellForRowAtIndexPath
dans le niveau supérieur et si oui, comment faire?
Vous devez vous connecter pour publier un commentaire.
Tout ce que vous devez faire est de cela (dans votre UIViewController qui a un UITableView). Vous n'avez pas à vous soucier de ce qui se passe au niveau des cellules à ce stade.
Il suffit d'ajouter le code ci-dessus dans votre contrôleur, et vous verrez que la chose se produit lorsque vous revenez de votre second point de vue. L'appel à
reloadData
dit à la vue de la table qu'il doit actualiser ses cellules à partir de votre modèle, et tout le reste suit bien.Si vous ne souhaitez recharger la cellule qui a été sélectionné, remplacer
viewWillAppear:
dans la sous-classe personnalisée deUITableViewController
comme suit:REMARQUE: en Supposant que vous avez laissé
clearsSelectionOnViewWillAppear
ensemble deYES
(par défaut), vous devez obtenir le chemin d'index de la ligne sélectionnée avant d'appelersuper
, qui efface la sélection.Aussi, le la solution de @ZoranSimic de simplement appeler
[self.tablView reloadData]
est acceptable, c'est moins de code et toujours efficace.Enfin, peut-être la meilleure façon de garder votre vue de la table de cellules en synchronisation avec le modèle des objets qu'elles représentent, est de faire comme
NSFetchedResultsController
et utilisez la clé-valeur d'observation (KVO) et/ouNSNotification
d'informer votre table view controller lorsque les objets de modèle ont changé de sorte qu'il peut recharger les cellules correspondantes. La table view controller pourrait commencer en observant l'évolution de son modèle d'objets dansviewDidLoad
et de fin d'observation, endealloc
(et n'importe où vous manuellement déchargerauto.vue
).En plus de la réponse de Zoran Simic ici le code Swift:
viewDidLoad()
lorsque vous souhaitez récupérer les données à partir deviewWillAppear()
.Vous pourriez mettre en œuvre les méthodes de
UINavigationControllerDelegate
et de créer la logique de l'rafraîchissant quand popping vue des contrôleurs.Une autre façon de le faire serait d'exécution sur votre table view controller une certaine logique sur
viewWillAppear
, pour actualiser sur la base des données de l'sauté de-vue-contrôleur.Si vous avez besoin d'envoyer des données à partir de la seconde vue-contrôleur à la première vue-contrôleur, n'oubliez pas que votre seconde vue-contrôleur "ne sait pas l'existence de la précédente-vue-contrôleur. Elle doit être transparente pour elle. Vous devez mettre en œuvre un protocole pour faire le second point de vue contrôleur envoyer des données à la première vue-contrôleur. Ce serait une troisième option à ce problème, depuis votre premier point de vue contrôleur serait le délégué et le second point de vue contrôleur allait envoyer une info pour le délégué, vous pourriez être en train de préparer votre table view (premier-vue-contrôleur) pour recharger, basé sur les données reçues.
viewWillAppear
est appelée chaque fois que l'affichage apparaît inclure la première fois.Voici ma solution pour recharger le point de vue que lorsque vous revenez en arrière
- Je créer une variable dans
.h file
de monViewController
pour vérifier que c'est bien la première fois que je vais à ceViewController
ou quand je retournerAprès que, dans
viewWillAppear
Espérons que cette aide
Peut-être peut vous aider maintenant.
Pour Swift 2+
Dans votre viewDidAppear méthode:
Si vous souhaitez recharger tous table:
Si vous souhaitez recharger uniquement la cellule sélectionnée.
Mis à jour pour Swift 3