2015-08-01 9 views
9

A UITabBarController auf den Stapel geschoben wird:Schaltfläche Bearbeiten angezeigt nicht in UITabBarController der MoreNavigationController

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

Sobald die mehr Tab-Taste präsentiert korrekt zeigt, aber die Schaltfläche Bearbeiten der Registerkarte Balken neu zu ordnen nicht. Nach dem docs on the MoreNavigationController:

Die Schnittstelle für den Standard Weitere Artikel enthält eine Schaltfläche Bearbeiten, die der Benutzer die Tab-Leiste neu konfigurieren können. Standardmäßig ist der Benutzer erlaubt, alle Elemente auf der Registerkartenleiste neu anzuordnen. Wenn Sie nicht möchten, dass der Benutzer einige Elemente ändert, können Sie die entsprechenden View Controller aus dem Array in der anpassbaren ViewControllers -Eigenschaft entfernen.

Meine Vermutung ist, dass die Tab-Leiste nicht glücklich ist, in einem Navigationscontroller zu sein. Irgendwelche Ideen, um den Bearbeitungs-Button zurück zu bringen?

+0

Sie brauchen einen Navigationscontroller, um Ihren Tab-Bar-Controller zu halten?Wie Sie festgestellt haben, könnte dies Ihr Problem sein. Besser wäre es, den Tab-Bar-Controller modal mit 'presentViewController' zu präsentieren, der entsprechend den Dokumenten unterstützt wird. –

+1

@RoryMcKinnel: Die Antwort auf ** memmons ** ist eine häufige Situation bei Anwendungen, die ein * login * oder * onboarding * erfordern. Sie beginnen mit einem Navigationscontroller und müssen später zu einem Tab-Controller wechseln. – SwiftArchitect

+0

@SwiftArchitect Ich bekomme den Anwendungsfall, aber Sie können eine Reihe von Möglichkeiten implementieren, die besser mit Container-Controllern arbeiten. Daher würde mein Kommentar, ob es wirklich von einem Nav-Controller gepusht werden muss, wenn man es modal präsentiert, das Problem wahrscheinlich lösen würde. Wie sehr gut in Ihrer Antwort 8 beschrieben). –

Antwort

16

Sie können sowohl eine UINavigationController als auch eine UITabBarController haben; mit Storyboard hilft, das Problem besser zu verstehen, jede dieser Lösungen funktioniert:

  1. mit einem UITabBarController als Anfangs-View-Controller
  2. Verwenden presentViewController statt pushViewController
  3. Verwenden Sie einen modal Storyboard segue Beginnen Sie ausführen eine modale Präsentation
  4. Tauschen Sie die rootViewController dynamisch
0 aus

Initial-View-Controller Design-

Wenn der Tab Bar-Controller initial-View-Controller, die bearbeiten Taste normalerweise angezeigt wird.

enter image description here


Pushed Entwurf

Ein weiterer Navigation Controller istAnfangs-View-Controller, unter Verwendung eines von 5 adaptive Aktion Segue:

  • anzeigen
  • Individuelle

-> No bearbeiten Taste, da sie in direktem Konflikt mit den Eltern UITableViewController.

  • Detailansicht
  • Präsens Modal
  • Popover Präsentation

->bearbeiten Schaltfläche angezeigt, wie erwartet.

enter image description here


-Code

1. Programm Modal

den genauen Code in der Frage vorgelegt, ändern Sie die letzte Zeile:

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

2. Storyboard Modal

mit der Storyboard Thema, erstellen Sie eine Überleitung des richtigen Typs, eine Kennung zuweisen (d. H. presentModallySegue) und die 5 Linien über geworden dieser einzelne Zeile:

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

3. root Swap

Eine drastischere Lösung beinhaltet im window Ebene der Stammansicht Controller Auslagern:

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

Fazit

Entweder ändern Sie Ihr Design der Tab-Leiste Controller als Anfangs-View-Controller oder präsentieren die Tab Bar-Controller modal zu übernehmen.

5

Der Grund ist, dass sich die Navigationsleiste Ihres Presenters mit der Navigationsleiste überschneidet. Weitere Informationen finden Sie unter.

Wenn Sie nicht die Navigationsleiste für Sie Navigationscontroller zeigen tun, werden Sie in der Lage sein, die bearbeiten Taste erneut, um zu sehen, wenn Sie auf den Mehr Registerkarte tippen.

Verwandte Themen