Chargement UINavigationController d'une autre nib automatiquement par UITabBarController

StackOverflow https://stackoverflow.com/questions/883510

  •  22-08-2019
  •  | 
  •  

Question

Je pense que je l'ai trouvé la cause: la fenêtre du document Info dans IB a un avertissement: «Sélection Navigation Controller (deuxième) 'a la propriété de nom de plume réglée sur « SecondView.nib », mais ce contrôleur de vue est ne vise pas à avoir son profil d'affichage de cette manière. "

Bummer.


J'ai nib construit dans Interface Builder qui a UITabBarController au plus haut niveau et des commutateurs entre UINavigationControllers.

Il fonctionne très bien quand tout est en un seul fichier nib, mais je voudrais utiliser des fichiers séparés pour nib UINavigationControllers.

En commençant par le modèle TabBar d'Apple, si je change juste la classe de SecondView à UINavigationController, tout pauses:

deuxième plume

et tout ce que je reçois est ceci:

// imgur has lost the image, sorry //

Est-il possible d'avoir fichier séparé pour UINavigationController sans mettre tout programme?

Je voudrais TabBarController pour gérer le chargement et le déchargement de grué.

Était-ce utile?

La solution

échanger simplement le UINavigationController avec le FirstViewController.

Ainsi, la hiérarchie devrait être comme ceci:

Tab bar controller
-----Tab bar
-----Navigation Controller
----------First View Controller
---------------Navigation Item
----------Tab bar item (First)
-----Navigation Controller
----------Second View Controller
---------------Navigation Item
----------Tab bar item (Second)

Vous définissez la pointe du contrôleur First View dans l'inspecteur du fichier nib contenant les objets de vue réelle (Puisque vous essayez de les séparer dans des fichiers séparés, ce qui est une bonne chose).

Vous avez un onglet, cet onglet a un contrôleur de navigation qui charge Controller First View comme vue racine.

Fait.

Autres conseils

Je n'ai pas essayé la mise en place UINavigationController via IB. Je plusieurs écrans, chacun est stocké dans XIB séparé et il y a une classe correspondante qui prolonge UIViewController. Dans applicationDidFinishLaunching je UIViewControllers à l'aide de initialiser des xib mais créer manuellement UINavigationController, ajouter le point de vue du contrôleur de navigation à la fenêtre et appuyez sur la première vue de contrôleur de navigation.

Je ne sais pas si cela aide.

- (void)applicationDidFinishLaunching:(UIApplication *)application {    

    navigationController = [[UINavigationController alloc] init];

    FirstViewController * viewController = [[FirstViewController alloc] 
                                           initWithNibName:@"FirstView"
                                                    bundle:nil];
    [navigationController pushViewController:viewController animated:NO];
    [viewController release];
    [window addSubview:navigationController.view];
    [window makeKeyAndVisible];
}

Au-dessus FirstViewController étend UIViewController, dans IB vous créez votre vue puis définissez la classe propriétaire du fichier à votre classe (par exemple ici FirstViewController) et connecter l'avis du propriétaire du fichier à la vue du UIView.

Je crois que vous cherchez quelque chose comme ça. Vous remplacer « tout » avec le nom de fichier que vous deuxième nib.

newNavController = [[UINavigationController alloc] initWithNibName:@"whatever" bundle:[NSBundle mainBundle]];

Tout d'abord, il semble que vous avez vos UITabBarItems sous les contrôleurs de navigation au lieu de directement sous le UITabBarController. Cela peut faire partie de votre problème.

En second lieu, lorsque vous ajoutez un UITabBarController dans IB et puis cliquez sur son icône dans la liste des objets de haut niveau (votre première capture d'écran), l'inspecteur des attributs vous permettra de changer le contrôleur type de vue pour chacun des onglets . Avec cela, vous pouvez les changer tous les contrôleurs de navigation, si vous le souhaitez. De plus, puisque vous vouliez charger des vues personnalisées et contrôleurs de vue d'autres grué, si vous regardez la section « View Controller » en bas de l'inspecteur des attributs, vous pouvez sélectionner une pointe de votre projet pour charger la vue. En supposant que « le propriétaire du fichier » de cette pointe est définie sur votre sous-classe UINavigationController, il devrait tout beau travail.

Tout cela sans une grande quantité de travail de codage, que ce soit. Faites-moi savoir si vous voulez des captures d'écran de ce que je parle dans le cas où vous ne trouvez pas ces panneaux.

J'ai trouvé les mêmes warning.I ont gardé tout contrôleur de vue dans les fichiers xib distincts. Je me suis débarrassé de ce en enlevant .nib nom et de le garder vide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top