viewDidAppear ne fonctionne plus
Bonjour,
J'ai un petit souci... J'utilise un méthode viewDidAppear dans un de mes contrôleur de vue pour effectuer une action quand l'utilisateur clique sur un onglet spécifique de ma tab bar. Au départ ma tab bar était incluse directement dans le main windows. Mais actuellement depuis que j'ai mis ma tab bar dans une autre vue le contrôleur de vue n'exécute jamais viewDidAppear. Pourquoi ?
J'ai un petit souci... J'utilise un méthode viewDidAppear dans un de mes contrôleur de vue pour effectuer une action quand l'utilisateur clique sur un onglet spécifique de ma tab bar. Au départ ma tab bar était incluse directement dans le main windows. Mais actuellement depuis que j'ai mis ma tab bar dans une autre vue le contrôleur de vue n'exécute jamais viewDidAppear. Pourquoi ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Mets un NSLog dans viewWillDisappear ?
J'ai testé avec un NSLog viewWillDisappear n'est jamais invoquée. (Par contre viewdidload est bien appelé)
Si tu attends une seconde apparition, oui.
Si c'est pour la première apparition, non.
Autrement la doc sur la méthode viewDidAppear est assortie d'un Warning
viewDidAppear:
Sent to the controller after the view fully appears and animations end.
- (void)viewDidAppear:(BOOL)animated
Parameters
animated
If YES, the appearance of the view is animated; otherwise, it is not.
Discussion
The default implementation of this method does nothing. Subclasses may override this method to take an appropriate action. When doing so, they must invoke super.
Warning:
If the view belonging to a view controller is added to a view hierarchy directly, the view controller will not receive this message. If you insert or add a view to the view hierarchy, and it has a view controller, you should send the associated view controller this message directly. Failing to send the view controller this message will prevent any associated animation from being displayed.
window->addsubview:montabar
pas de problèmes
maintenant je fais
window->addsubview:MoncontrolleurDeVue.view->addsubview:montabar
Et donc maintenant quand je clique sur un onglet de mon tabbar j'ai pas le viewDidAppear qui se lance
C'est la que je suis un peu perdu pour la solution. Je dois envoyer ce message au controlleur de vue du tab bar ? De quelle manière ? Surtout que que le tabbar controller est sous forme d'objet IB.
J'ai tenté (un peu naivement) :P de faire
Je vois pas vraiment comment faire
Notamment, il faut définir les classes des UIViewController à la fois dans MainWindow.xib (voir image pour la hiérachie des UIViewController) et naturellement pour File's owner du xib qui sera chargé.
Si tu fais tout cela à la main sans le secours du template TabBar Application, il faut faire de même.
Du coup les viewDidLoad ne fonctionnent plus. Les sources dans le fichier attaché.
Ce n'est pas fait pour fonctionner ainsi ... donc forcément même si cela n'est pas impossible à faire tu rames à contre-courant. On devrait pouvoir y arriver mais tu rames à contre-courant.
Dans ce template, le contenu de window est défini par un UITabBarController. ce dernier pilote un tableau de UIViewController, et selon l'onglet sélectionné présente une vue généralement configurée dans un nib spécifique correspondant à la classe du UIViewController.
En clair, si tu veux que ton splashView soit chargé quelque part selon ce modèle, il faut qu'il soit dans l'un des xib, associé à l'un des UIViewController, répertoriés par le UITabBarController.
ou alors que tu fasses une transition à partir d'un autre écran ...
Si tu veux "customiser" ton affichage du premier écran, la méthode à suivre est décrite par le message de IB dans le FirstViewController :
Optionally move this view into a separate nib file and set the nib name in the First View Controller Attributes.
optionnally car évidemment, tu peux configurer le premier écran dans MainWindow.xib.
Dans le code que je t'ai fourni , si on retire les /* */ et qu'on met
NSLog(@first view did load);
NSLog(@second view did load);
on voit bien ces log