0

J'ai une application TabBar avec plusieurs plumes, la plupart avec un NavBar. Cela fonctionne plutôt bien, sauf pour les "vues" qui se trouvent dans la section "Plus" du tabBar.Application TabBar, moreNavigationBar et nibs avec navigationBars

Comme prévu, il mettra un NavBar pour revenir à la liste "Plus", ainsi que le NavBar que j'ai placé dans la plume.

J'ai essayé de supprimer la vue des contrôleurs de la moreNavigationBar et de mettre le contrôleur haut de la barre de navigation de ma plume, mais je reçois et vue supplémentaire de quelque part:

- (void)viewDidLoad {  
    TestAppDelegate *appDelegate = [[UIApplication sharedApplication] delegate]; 
    UITabBarController *ctrl = appDelegate.rootController; 

    UINavigationController *navCtrl = ctrl.moreNavigationController; 

    [navCtrl popToRootViewControllerAnimated: NO]; 
    [navCtrl pushViewController: navController.topViewController animated: YES]; 
    navController = navCtrl; 
[super viewDidLoad]; 
} 

Mon AppDelegate:

@interface TestAppDelegate : NSObject <UIApplicationDelegate> { 
    UIWindow *window; 
UITabBarController *rootController; 
} 

@property (nonatomic, retain) IBOutlet UIWindow *window; 
@property (nonatomic, retain) IBOutlet UITabBarController *rootController; 

La plume de MainWindow est celle d'un projet basé sur Windows avec un TabBarController, lié à rootController dans le délégué de mon application.

Les autres pointes ont une vue + navigationController et j'ai une sous-classe UITableViewController comme contrôleur de vue racine. Si je pouvais faire fonctionner cela ne résoudrait pas encore mon problème, parce que je veux permettre à l'utilisateur de le placer n'importe où dans le TabBar, donc, je dois avoir un moyen de savoir s'il y a un NavigationBar. Donc, ma question est, comment savez-vous s'il y a une barre de navigation (dans ce cas, si la barre de navigation de tabBar est affichée) et, si oui, comment obtenir mon navigationController pour "devenir" le contrôle de navigation de tabBar?

Ou, si vous avez une autre idée sur la façon de résoudre ce problème, je serais également apprécié :)

Répondre

1

La recommandation de la pomme est que vous avez le contrôleur TabBar contiennent les contrôleurs de navigation et non l'inverse autour. J'ai une configuration plus ou moins comme ça, et je l'onglet Plus de tenir un contrôleur de navigation, essentiellement comme ceci:

 
@interface SomethingNavViewController : UIViewController { 
    UIView* aview; 
    UINavigationController *navigationController; 
} 
@property (nonatomic, retain) IBOutlet UIView *aview; 
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController; 

@end 

Dans le NIB, j'ai un contrôleur séparé Nav dans la vue du plus panneau, Je n'ai pas remplacé la vue de l'élément de la barre d'onglets par une vue de contrôleur de navigation, j'ai simplement ajouté un contrôleur de navigation à la vue.

Dans mon dossier de mise en œuvre, j'ai:

 
- (void)viewDidLoad { 
    [super viewDidLoad]; 
    [[self view] addSubview:[navigationController view]]; 
    SomeOtherController *aController = [[[SomeOtherController alloc ] initWithNibName:@"SomeOtherController" bundle:nil ] autorelease]; 
    aController.title = @"Artwalks"; 
     // lots of application logic here. 
    [self.navigationController pushViewController:aController animated:YES]; 
    [self.navigationController setDelegate:self]; 
} 

Une chose clé à ce sujet est que je l'ai mis en œuvre la méthode de délégué du NavigationController, ce qui est très pratique lorsque vous êtes insérez le contrôleur de navigation. J'ai trouvé quand je ne le fais pas, mon point de vue ne reçoivent pas les messages viewDidAppear, donc j'appliqué le protocole et a ajouté cette méthode:

 
- (void)navigationController:(UINavigationController *)navigationController didShowViewController:(UIViewController *)viewController animated:(BOOL)animated 
{ 
    if ([viewController respondsToSelector:@selector(viewDidAppear:)]) { 
     [viewController viewDidAppear:animated]; 
    } 
} 

et qui a résolu une variété de mes problèmes persistants.

De toute façon, j'espère que cette réponse vous a donné le détail dont vous aviez besoin. Si ce n'est pas le cas, veuillez donner plus de détails sur votre question. Je ne suis pas très sûr de ce que mais je reçois et vue supplémentaire de quelque part rencontré, mais il semble que quelque chose que j'ai rencontré avant de trouver cette solution.

+0

Merci. Votre réponse m'éclaire un peu plus, mais lorsque j'ai essayé de l'implanter, je n'ai pas obtenu le résultat escompté. Je reçois toujours deux barres de navigation lorsque je suis dans le "Plus" article/section. Je ne comprends pas si j'ai besoin d'une plume pour le "SomethingNavViewController" mais j'ai essayé les deux sens (avec et sans plume). Avec une plume, j'en ai créé une basée sur la vue XIB, puis j'ai fait glisser un contrôle de navigation et lié la sortie depuis le SomethingNavViewController. Cela semble mal en quelque sorte. Pouvez-vous créer un exemple de projet et l'héberger quelque part pour que je puisse y jeter un coup d'œil? Merci. –

+0

J'ai lu votre réponse à nouveau et j'ai découvert que j'ai raté la partie NIB. Que voulez-vous dire par "ajouté un contrôleur de navigation à la vue"? J'ai un TabBarController créé directement dans MainWindow.xib, mais je ne vois pas où placer un NavController. Je ne peux pas voir plus de panneau, car IB affiche directement tous les éléments et ne place le bouton "Plus" qu'une fois que je cours dans le simulateur. –

+0

Désolé, je voulais dire XIB chaque fois que j'ai dit NIB ci-dessus. Vieilles habitudes. Si vous pouvez poster un exemple d'application, je vais vérifier. Je suspecte de ce commentaire que je ne comprends pas complètement le problème que vous rencontrez. – corprew