Y a-t-il un moyen pour un UIViewController (à l'intérieur d'une pile de navigation) pour détecter s'il apparaît parce qu'il apparaît car une forage ou une forage a été effectuée? P>
Dans la viewwillappear, le TopViewController de UinavigationController et VisibleViewController sont déjà définis sur la nouvelle ViewController, malheureusement. P>
4 Réponses :
ne pouviez-vous pas regarder la propriété ViewControlers dans le contrôleur de navigation? P>
J'ai bien peur que non. Le contrôleur de vue actuel sera toujours le dernier élément de la matrice. Que cela se passe-t-il à la suite d'une édition poussée enfoncée ou d'un autre allégement du contrôleur sauté ne peut pas être détecté. :(
Vous pouvez sous-classer UinavigationController et ajouter une propriété didpushviewController code>. Ensuite, vous pouvez remplacer
pushviewController code> et
PopViewController code> pour définir correctement la propriété sur True ou False respectivement. P>
Ça a l'air bien. Je pensais juste qu'il y avait une façon plus facile que j'ai négligée. Merci.
Avez-vous simplement besoin de savoir ce que seront les contrôleurs de visualisation précédents et suivants? Ou avez-vous besoin de savoir spécifiquement si un contrôleur d'affichage a été sauté ou poussé? Vous pouvez implémenter la méthode suivante, définie par si, toutefois, vous devez savoir si un contrôleur de vue particulier a été sauté ou poussé, Ensuite, la suggestion des ponts mates est la voie à suivre. p> p> uinavigationcontrollerdelegate code>:
Une autre solution consiste à bloquer tous les contrôleurs d'affichage des variables locales de classe, puis dans la viewwillappear, vous savez que vous avez été touché à cause d'une forage si l'une des variables locales de classe est toujours définie. Vous savez même quel contrôleur l'utilisateur est renvoyé. Vous pouvez donc faire une logique différente (comme la récupération des valeurs modifiées des contrôleurs de vue que vous avez forés à). P>
N'oubliez pas de libérer et de nuler les références dans la viewwillappear de sorte que le système soit réinitialisé pour reconnaître les choses correctement. p>
J'aime ce mécanisme plus que de faire connaître les contrôleurs de forage du Master en tant que délégué pour pousser les changements, comme souvent, ils travaillent sur une petite partie de données distincte et ne devraient pas avoir à connaître tout un ensemble contrôleur d'affichage du maître. Cela les rend plus faciles à réutiliser aussi bien depuis qu'ils peuvent être appelés de nombreuses classes différentes. P>
J'ai eu du mal avec ça aussi. J'avais espéré créer une classe d'assistance et en faisant ma "pile" UinavigationControllerdelegate, puis en regardant via "NavigationController: WillShowviewController:" Mais il y a deux problèmes: 1) semble être appelé même lorsqu'il n'est pas poussé (tel que la tabulation de cette pile - qui semble suspect) et 2) Ceci est appelé après la vision du contrôleur associé, qui provoque des problèmes de logique pour moi, car j'ai besoin de savoir si je suis dans la même pile avant que la vue n'apparaisse. Je souligne cela parce que cette approche semblait élégante, mais était une décès.