0

Bon, voici mon problème: Mon application a un affichage des catégories dans la barre d'onglet en bas de l'écran iPhoneOS. Cela permet seulement 5 catégories avant qu'il présente le bouton PLUS. J'ai plus de 25 ans (merci de ne pas répondre en disant: "Repensez votre application ... etc" - cela a été grossièrement dit auparavant, il s'agit de catégories de nourriture, de boissons, etc ... et ne peut pas être changé). Je veux permettre à l'utilisateur de mettre ses favoris sur la page d'accueil. Le système d'édition Apple moreNavigationController permet uniquement de réarranger 20 éléments de la barre d'onglets en raison des contraintes d'espace sur la page d'édition. Ce n'est pas suffisant, j'ai donc besoin d'implémenter mon propre écran d'édition. J'ai mis le rightBarButtonItem à zéro et ai créé le mien. En utilisant NSLog, je peux voir le "clic" qui se produit lorsque je clique sur le bouton EDIT, mais je ne peux pas pousser en utilisant pushViewController. Rien ne se passe. Je pense que cela a quelque chose à voir avec le contrôleur de navigation auquel je m'adresse ... mais je ne suis pas sûr. ps: Tout cela se passe dans mon délégué d'application qui agit à la fois comme UITabBarControllerDelegate & UINavigationControllerDelegate.Agir sur le clic d'un bouton sur la barre de navigation pour plusNavigationController - Ne peut pas pushviewcontroller

J'ai essayé de faire ce qui suit:

- (void)navigationController:(UINavigationController *)navigationController_local willShowViewController:(UIViewController *)viewController_local animated:(BOOL)animated 
{ 

    UIViewController * currentController = navigationController_local.visibleViewController; 
    UIViewController * nextController = viewController_local; 

// Do whatever here. 
NSLog(@"Nav contoller willShowViewController fired\n'%@'\n'%@'\nThere are currently: %d views on the stack\n",currentController,nextController,[self.navigationController.viewControllers count]); 

if ([nextController isKindOfClass:NSClassFromString(@"UIMoreListController")]) 
{ 
    UINavigationBar *morenavbar = navigationController_local.navigationBar; 
    UINavigationItem *morenavitem = morenavbar.topItem; 
    morenavitem.rightBarButtonItem = nil; 
    NSLog(@"Is a UIMoreListController\n"); 

    UIBarButtonItem *editTabBarButton = [[UIBarButtonItem alloc] 
      initWithTitle:@"Edit" 
      style:UIBarButtonItemStylePlain 
      target:self 
      action:@selector(editTabBar:)]; 

    morenavitem.rightBarButtonItem = editTabBarButton; 
    [editTabBarButton release]; 
} 


} 

Cela fonctionne pour placer un bouton EDIT en haut à droite de l'écran - imitant l'apparence d'Apple et se sentir ... mais quand ce bouton est cliqué, vous ne peut pas quitter le darn moreNavigationController.

J'ai essayé beaucoup de choses. UIAlerts fonctionne, etc ... mais en poussant (ou en sautant - même en mode root) un contrôleur de vue sur la pile ne le fait pas.

- (void) editTabBar:(id)sender { 
NSLog(@"clicked edit tabbar\n"); 
NSLog(@"Total count of controllers: %d\n",[self.navigationController.viewControllers count]); 

TabBarViewController *tabBarViewController2 = [[TabBarViewController alloc] initWithNibName:@"TabBarView" bundle:nil]; 
    [email protected]"Edit Tab Bar"; 
    [self.navigationController pushViewController:tabBarViewController2 animated:YES]; 
    [tabBarViewController2 release]; 

NSLog(@"finished edit tabbar\n"); 

} 

Si vous cliquez sur le bouton Modifier sur la page d'affichage du moreNavigationController, vous obtenez les entrées du journal comme prévu et (ce qui est étrange) les vues sur les montées de pile - mais pas de changement de page se produit. Je l'ai marqué pour ne pas utiliser le contrôleur de navigation correct ... mais je suis perdu sur la façon de trouver celui à utiliser.

c'est aussi un bizarre. Dans la fonction d'édition si je viens de le faire:

- (void) editTabBar:(id)sender { 
self.tabBarController.selectedIndex = 0; 
} 

Il ne me ramener à la maison (à tabbarcontroller 0)

mais faire ceci:

- (void) editTabBar:(id)sender { 
    [self.navigationController popToRootViewControllerAnimated:YES]; 
    } 

ne fonctionne pas.

Est-ce que moreNavigationController a une qualité spéciale qui se visse avec le reste du système?

Répondre

2

Je voudrais essayer de réimplémenter toute la fonctionnalité "Plus" à partir de zéro. En d'autres termes, stockez les quatre onglets d'accueil dans les valeurs par défaut de votre utilisateur et ajoutez un cinquième onglet fictif qui passe à votre propre réimplémentation complète de la pile du contrôleur de vue.

Vous pourriez même écrire une sous-classe légère de UITabBarController qui a manipulé ceci pour vous.

+0

J'essaie que ... J'ai aussi des problèmes avec cela - je vais poster un lien ici: http://stackoverflow.com/questions/2609916/how-to-pushviewcontroller-to-a-viewcontroller- stocké dans un tabbaritem – Jann

0

UITabBarController est mal, donc je ne serais pas du tout surpris si MoreController avait aussi des propriétés spéciales.

J'ai réussi à intercepter le contrôleur More dans shouldSelectViewController pour changer la source de données; vous pourriez être en mesure de trouver une solution de rechange là-bas. Je suis enclin à convenir que vous pourriez envisager de remodeler votre application de sorte que vous n'ayez pas besoin d'un nombre illimité de viewControllers attachés à la barre d'onglets juste pour sélectionner des catégories; vous pourriez avoir plus de chance en utilisant une barre d'outils avec une vue unique, défilante, personnalisée. Si c'est vraiment la meilleure façon de choisir des catégories pour votre application, bien sûr.