0

Exemple: J'ai créé un ensemble minimal de fichiers qui mettent en lumière la question ici: http://uploads.omega.org.uk/Foo3.zipviewDidLoad pas appelé par le parent UITabBarController

Si sont appelés viewDidLoad/viewInitWithNibName, une boîte de message est affiché. La boîte de message n'est pas affichée, par conséquent, les méthodes ne sont pas appelées.

Détails: J'ai une application qui tente d'utiliser un UITabBarController pour basculer entre plusieurs vues. Les vues sont liées au constructeur UITabBarController à l'aide du constructeur d'interface (sélectionnez l'onglet, ouvrez Attributs (Option-1) et remplissez le champ Nom NIB), et elles sont donc affichées "automatiquement" sans code supplémentaire. derrière pour les faire apparaître.

Est-il prévu que les vues chargées de cette manière n'aient pas leur méthode viewDidLoad exécutée? Sinon, comment vais-je me tromper, et qu'est-ce que j'ai besoin de changer.

Si ce comportement est prévu, je peux penser à quelques contournements, mais toutes les suggestions sont appréciés:

  1. Scrap la UITabBarController et mettre en œuvre la vue me commutation (en utilisant initWithNibName et ajouter/insert/push/Subview).
  2. Appelez chacune des méthodes viewDidLoad des enfants manuellement dans la méthode viewDidLoad de l'UITabBarController.

Merci d'avance pour toute aide que vous pouvez offrir.

Répondre

1

OK, j'ai réussi à résoudre ce problème.

La liaison de la NIB à TabBarController n'est pas suffisante - vous devez également lier le code beind, il n'est pas implicitement lié par la NIB même si vous avez correctement défini le propriétaire du fichier.

Ouvrez IB et sélectionnez la page correspondante. Cliquez au milieu pour sélectionner le contrôleur de vue. Entrez le nom NIB de la vue secondaire, puis allez à la dernière page (option 4). Dans 'identité de classe', entrez le nom du fichier code-behind pour la sous-vue NIB.

Tout va maintenant fonctionner correctement.

J'ai téléchargé une version correcte du code exemple: http://uploads.omega.org.uk/Foo3-Correct.zip

0

Vous n'instanciez pas ImportedView n'importe où dans votre projet, donc il n'appelle pas initXXX ou viewDidAnything. Si vous mettez votre code d'alerte dans - [FirstViewController viewDidLoad], il se déclenchera comme prévu.

+0

Vous avez raison, il n'est pas instancié. Est-il possible de faire automatiquement instancier la classe code-behind lors de la connexion des vues pour voir les contrôleurs utilisant IB, ou ai-je besoin d'ajouter et d'instancier les vues enfant dans les méthodes viewDidLoad/init des parents? –

Questions connexes