2010-11-05 36 views
2

J'ai regardé autour de vous en ligne, et je n'ai pas été capable de trouver une solution acceptable à ce problème ...Code Pattern: Chargement des objets TabBarController directement à partir du fichier .xib indépendant (au lieu de MainWindow.xib)

Je suis à la recherche d'un modèle simple de code:

charge un objet TabBarController (avec les contrôleurs associés sous-vue) à partir d'un fichier séparé .xib, au lieu d'inclure et le chargement automatique d'un défaut MainWindow.xib.

En termes XCode, à partir d'un nouveau projet iPad/iPhone comme "la barre d'onglets Application", l'objectif est de résoudre les éléments suivants:

  • Créer le projet
  • Move: TabBarController, TabBar , FirstViewController et SelectedSecondViewController de MainWindow.xib, dans un nouveau "TabBarController.xib" fichier
  • Après le déplacement, MainWindow.xib ne doit contenir: du fichier propriétaire, First Responder, délégué App, fenêtre
  • En TabBarController.xib, Le propriétaire du fichier et le premier répondeur sont définis sur: UIApplication et UIResponder, respectivement.
  • Changer "didFinishLaunchingWithOptions" dans le principal délégué de l'application à ce qui suit:

RETIRER:

 
    [self.window addSubview:tabBarController.view]; 

ADD:

 
    UITabBarController *uiTab = [[UITabBarController alloc] initWithNibName:@"TabBarController" bundle:nil]; 
    [self.window addSubview:uiTab.view]; 

Avec ces changements, l'application se compile et fonctionne, mais quand le TabBarController charge la barre d'onglets est "vide" - il ne semble y avoir aucun contenu dans le contrôleur. En recherchant dans le débogueur, le "init" n'initialise pas à partir des données correctement, ou quelque chose dans le fichier .xib n'est pas défini correctement.

Quelle est la bonne solution à cela? Je me rends compte qu'il existe d'autres façons de le faire, et oui, je les fais travailler dans d'autres applications. Ce que je recherche cependant, est une solution spécifique utilisant le projet par défaut, qui peut être utilisé comme un modèle général pour la configuration du code iOS.

Merci à l'avance pour toute aide

  • js

Répondre

1

En supposant que vous commencez avec le modèle « Tab barre d'application » et déplacez les contrôleurs UITabBarController et vue associée à une nouvelle pointe comme vous l'avez ...

Dans votre nouvelle plume, le propriétaire du fichier doit être défini sur votre classe AppDelegate. Puis connectez la sortie "tabBarController" du propriétaire du fichier au UITabBarController.

Ensuite, dans votre - [application: didFinishLaunchingWithOptions:], ne retirez pas cette ligne:

[self.window addSubview:tabBarController.view]; 

Au lieu de cela, charger la nouvelle pointe juste avant que votre délégué application en tant que propriétaire:

[[NSBundle mainBundle] loadNibNamed:@"TabBarController" owner:self options:nil]; 

Cela définira votre propriété tabBarController (puisque vous avez fait cette connexion dans la plume), puis vous pouvez procéder comme d'habitude. Ce que vous faisiez était en train de créer un tout nouveau UITabBarController, et de ne pas charger du tout le nib du tout. (bon, ok vous le chargiez pendant un bref instant, mais ensuite ne faites rien d'utile avec ça)

Espérons que ça aide.

+0

Ce n'est pas ce qu'il voulait. il veut être capable de charger un contrôleur de barre d'onglets à partir d'un fichier xib n'importe où dans l'application. par exemple - dans un contrôleur de popup. –

2

Je pense que je sais ce que vous cherchez parce que je veux la même chose.

  1. Créer un nouveau fichier xib vide au constructeur de l'interface. Ajouter au xib TabBarController de la bibliothèque.
  2. Modifiez tout ce dont vous avez besoin sur ce contrôleur de barre d'onglets sur le xib.
  3. Bien sûr, sauf ...

Déterminer à partir de laquelle le contrôleur ne veulent voir créer ce xib avec le contrôleur de barre d'onglets. En d'autres termes, qui est le contrôleur de vue qui provoquera l'apparition de ce contrôleur de barre d'onglets. Appelons que contrôleur de vue ParentViewController

Dans ce contrôleur de vue, créer un IBOutlet à un TabBarController. Retournez au xib, attribuez l'identité du propriétaire du fichier au ParentViewController et n'oubliez pas de connecter la sortie du contrôleur de la barre d'onglets dans le propriétaire du fichier au contrôleur de la barre d'onglets dans le xib. enregistrer le xib et vous êtes prêt à partir. Lorsque vous voulez présenter cette barre d'onglets, décidez simplement de quelle manière vous voulez le faire: Modale, Popup ou autre chose (pas dans un contrôleur de navigation, car Apple n'autorise pas les contrôleurs de barre d'onglets dans les contrôleurs de navigation).

Lorsque vous décidez, présentez simplement votre prise de contrôle de la barre d'onglets de façon à présenter n'importe quel autre contrôleur de vue. par exemple:

[self presentModalViewController:self.myTabBarController animated:YES];