Le button Modifier ne s'affiche pas dans MoreNavigationController de UITabBarController

Un UITabBarController est poussé sur la stack:

 let presenter = presentingViewController as! UINavigationController let tabvc = UITabBarController() tabvc.viewControllers = vcs tabvc.customizableViewControllers = vcs presenter.pushViewController(tabvc, animated: true) 

Une fois présenté, le button de l'onglet plus affiche correctement, mais le button d'édition pour réorganiser les barres d'onglet ne le fait pas. Selon les documents sur le MoreNavigationController :

L'interface de l'article standard Plus inclut un button Modifier qui permet à l'user de reconfigurer la barre d'tabs. Par défaut, l'user est autorisé à réorganiser tous les éléments de la barre d'tabs. Si vous ne souhaitez pas que l'user modifie certains éléments, vous pouvez toutefois supprimer les controllers d'affichage appropriés du tableau dans la propriété personnalisable ViewControllers.

Ma conjecture est que la barre d'tabs n'est pas heureux d'être dans un controller de navigation. Des idées pour ramener le button d'édition?

Vous pouvez avoir à la fois un UINavigationController et un UITabBarController ; L'utilisation de Storyboard aide à mieux comprendre le problème. Chacune de ces solutions fonctionnera:

  1. Commencez avec un UITabBarController tant que controller de vue initial
  2. Utilisez presentViewController au lieu de pushViewController
  3. Utilisez un séquenceur Storyboard modal pour effectuer une présentation modale
  4. Echange dynamic du rootViewController

Conception initiale du controller de vue

Lorsque le controller de barre d'tabs est View Controller initial , le button Edit s'affiche normalement.

entrez la description de l'image ici


Conception poussée

Un autre controller de navigation est le controller de vue initial , utilisant l'une des 5 séquences d' action adaptatives suivantes :

  • Montrer
  • Douane

-> Aucun button Modifier , car il est en conflit direct avec le parent UITableViewController .

  • Montrer les détails
  • Présent Modalement
  • Présentation de Popover

-> Modifier le button affiché comme prévu.

entrez la description de l'image ici


Code

1. Programme Modal

En utilisant le code exact présenté dans la question, changez la dernière ligne:

 let presenter = presentingViewController as! UINavigationController let tabvc = UITabBarController() tabvc.viewControllers = vcs tabvc.customizableViewControllers = vcs presenter.presentViewController(tabvc, animated: true, completion: nil) 

2. Storyboard Modal

en gardant le thème Storyboard , créez une séquence du type correct, atsortingbuez un identifiant (ie presentModallySegue ) et les 5 lignes ci-dessus deviennent cette seule ligne :

 self.performSegueWithIdentifier("presentModallySegue", sender: self) 

3. échange de racine

Une solution plus drastique implique l'échange du controller de vue racine au niveau de la window :

 let tabvc = UITabBarController() tabvc.viewControllers = vcs tabvc.customizableViewControllers = vcs self.view.window!.rootViewController = tabvc 

Conclusion

Modifiez votre design pour adopter le controller de barre d'tabs en tant que controller de vue initial ou présentez le controller de barre d'tabs de façon modale .

La raison en est que la barre de navigation de votre présentateur chevauche la barre de navigation de la section Plus .

Si vous ne montrez pas la barre de navigation pour votre controller de navigation, vous pourrez voir le button Modifier à nouveau lorsque vous appuyez sur l'onglet Plus .