2016-10-10 12 views
0

Ich möchte eine App erstellen, mit der der Benutzer auf eine Schaltfläche auf V1 in der Navigationsleiste klicken kann. Dies wird zu V2 übergehen, wo sie eine andere Taste auf der Navigationsleiste auf V2 drücken können und es wird sie zu V1 zurückbringen, die den Tab-Leiste-Controller an der Unterseite hat. Ich möchte nicht die Tab-Leiste auf V2 und ich möchte nicht, dass V2 als Tab-Leiste Element. Wenn ich das versuche, verschwindet die Tab-Leiste auf V1, wenn ich von V2 auf V1 zurücksetze.Tab-Leiste verschwindet, wenn Sie zu einer anderen Ansicht zurückkehren

Tableiste Controller -> TAB BAR ITEM (V1) -> V2 (Via Navigationsleiste Taste Artikel auf V1) -> zurück zu V1 (auf V2 Via Navigationsleiste Taste Artikel)

ich hinzugefügt haben [self.navigationController, popViewControllerAnimated:YES]; zu meine Schaltfläche Funktion, aber es kommt mit einem Fehler - erwartete Ausdruck in Container-Literal.

Abgesehen von diesem Code habe ich noch keinen anderen Code in meiner App.

Ich bin mit Xcode 8.0 und Swift 3.0

+0

Sie erwähnten Sie verwenden Swift 3.0 aber die Funktion, die Sie hinzugefügt haben, ist in Obj-c? –

Antwort

0

Ich habe mein Problem nach Tagen versuchen gelöst, eine Antwort herauszufinden. Sie müssen dies zu jedem View-Controller hinzufügen.

@IBAction func unwindToViewController (sender: UIStoryboardSegue){ 

    } 

Dann können Sie dem Exit-Symbol auf dem View-Controller einen Übergang vom Bar-Button-Element hinzufügen.

You can view an image of the VC scene here.

0

Erstellen Sie zunächst Unterklasse von UITabBarController, dann Eigenschaften hinzufügen zu AppDelegate

var navController: UINavigationController? 
var tabController: MyTabController? 

Wenn Sie Tab-Leiste Controller auf App-Start angezeigt werden sollen dann diesen Code setzen in AppDelegate in didFinishLaunchingWithOptions

self.window = UIWindow(frame: UIScreen.main.bounds) 
let myStoryboard = UIStoryboard(name: "Main", bundle: nil) as UIStoryboard 
self.tabController = myStoryboard.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController 
//self.navController = UINavigationController(rootViewController: self.tabController!) 
//self.window?.rootViewController = self.navController 
self.window?.rootViewController = self.tabController 
self.window?.makeKeyAndVisible() 
return true 

Wenn Sie auf Tab-Leiste nach Anmeldung oder som springen ething sonst dann, fügen Sie Eigentum an diesen Controller

var appDelegate: AppDelegate! 

in viewDidLoad

appDelegate = UIApplication.shared.delegate as? AppDelegate 

Und soll Methode

func logIntoApp() { 

    appDelegate.tabController = self.storyboard?.instantiateViewController(withIdentifier: "MyTabController") as? MyTabController 
    appDelegate.window?.rootViewController = appDelegate.tabController 
} 

dann in Ihrem Registerkarte Artikel View-Controller möchte, erstellen Eigenschaft AppDelegate und zuweisen Delegieren Sie wie oben.

und Methoden sollten wie:

@IBAction func showWithTab(_sender: AnyObject) { 

     let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController 
     self.navigationController?.pushViewController(DefaultVC, animated: true) 
} 

@IBAction func showWithoutTab(_sender: AnyObject) { 

     let DefaultVC = self.storyboard?.instantiateViewController(withIdentifier: "DefaultViewController") as! DefaultViewController 

    // You can create your own animation 
     UIView.transition(from: (appDelegate.tabController?.view)!, to: (appDelegate.navController?.view)!, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in 

     self.appDelegate.window?.rootViewController = self.appDelegate.navController 
    } 

    // OR you can use like this way 
     UIView.transition(from: self.view, to: DefaultVC.view, duration: 0.3, options: UIViewAnimationOptions.curveEaseIn) { (finished) in 

     self.appDelegate.window?.rootViewController = self.appDelegate.navController 
    } 
} 
0

Warum nicht eine einfache Tab Bar benutzen? Etwas wie folgt aus:

enter image description here

und in VC1:

override func viewWillDisappear(_ animated: Bool) { 
    super.viewWillDisappear(animated) 

    myTab.removeFromSuperview() 
} 
+0

Wenn ich mit der Tab-Leiste zurück zur Ansicht gehe, ist die Tab-Leiste verschwunden. –

+0

@D.Murphy Look my edit – Rob

+0

Wenn ich ein Segment auf VC2 mit dem Navigationscontroller und ein Segment von VC2 zurück zu VC1 mit einem Push-Segment im Naviagtion-Controller gesetzt, die bar-Taste Element Ich habe auf der Navigationsleiste auf VC2 hinzugefügt wurde verschwunden. Tut mir leid, wenn meine Frage keinen Sinn ergibt, aber ich möchte, dass zwei VC mit einer Tab-Leiste verknüpft sind. Dann auf einer der VC möchte ich eine bar-Schaltfläche Element in der Navigationsleiste, die auf eine andere VC, die keine Tab-Leiste implementiert hat, zu segeln haben. Auf dieser VC habe ich einen weiteren Balkenknopf in der Navigationsleiste, der es mir erlaubt, mit einer Tab-Leiste zu meinem VC zurückzukehren. Vielen Dank. –

Verwandte Themen