2010-10-17 4 views
5

J'ai un ViewController qui ajoute à d'autres sous-vues qui ont sous-classé uiviewControllersViewDidAppear/viewWillAppear pas appelé

donc est comme ceci:

mainViewController 
     | 
    v---------v 
subVC1 subVC2 

Et ni subVC1 ou subVC2 ont le viewDidAppear/viewWillAppear tiré sur leur? Le contrôleur de vue principal crée dans le délégué de l'application et sa vue est également ajoutée à la fenêtre.

Voici un projet Xcode pour montrer mon problème: http://www.qfpost.com/download.do?get=92f03538907e72665ea794d98ff8392b

Répondre

5

J'ai regardé votre code. Le problème est que viewWillAppear/viewDidAppear est appelé lorsque la vue est ajoutée à la fenêtre, et non à l'une de ses sous-vues. Vous pouvez utiliser ViewDidLoad pour cela.

+0

Vraiment, je n'ai jamais eu à faire ça auparavant? –

+0

Dans votre exemple, vous ajoutez la vue de votre sous-VC2 à la vue de votre contrôleur principal. Cela n'appelle pas viewDidAppear, car cette méthode est appelée lorsque vous l'ajoutez à l'objet "window" de votre application. Deux autres erreurs que vous avez faites dans votre exemple: vous initialisez votre sous-VC2 avec la méthode "init". Je pense que vous voulez utiliser celui que vous avez construit dans la plume. Vous devez utiliser la méthode initWithNibName: bundle: Dernière chose, vous pourriez vouloir libérer le subVC2 quand vous avez ajouté sa sous-vue, parce que vous ne gardez aucune référence. – Julien

+0

Oh je ne voulais pas utiliser une plume, mais je ne devrais pas libérer subVC2 parce que j'ai seulement passé la vue de subvc2 à la méthode de addsubview pas tout le viewcontroller? Est-ce aussi comme ça à propos de la VW/DA sur l'iPhone, parce que je jure que cela ne m'est pas arrivé auparavant. –

1

Tout d'abord, êtes-vous sûr que vous devez réellement faire ce que vous faites avec cette hiérarchie de UIViewControllers? Pourquoi votre contrôleur MainViewController ne peut-il pas gérer les vues que votre subVC1 et subVC2 sont responsables? Deuxièmement, votre viewWillAppear/viewDidAppear sera appelé lorsque vous écrivez le code pour les appeler à partir de votre MainViewController. Sans savoir quoi que ce soit d'autre sur votre design, il n'est pas vraiment possible de savoir quand vous devriez les appeler, mais si les vues des sous-contrôleurs doivent toujours être visibles lorsque la vue "principale" est visible, il est probablement logique de les appeler à partir des méthodes viewWillAppear/viewDidAppear de votre mainViewController.