2016-09-12 10 views
18

Korzystam z następującego kodu, aby programowo nawigować do innego kontrolera ViewController. Działa dobrze, ale to jak ukrywa się navigation bar. Jak to naprawić? (pasek nawigacyjny jest tworzony przez zamieszczanie na ViewController w navigation controller jeśli się liczy.)Swift programowo przechodzi do innego kontrolera widoku/sceny

let storyBoard : UIStoryboard = UIStoryboard(name: "Main", bundle:nil) 

let nextViewController = storyBoard.instantiateViewControllerWithIdentifier("nextView") as NextViewController 
self.presentViewController(nextViewController, animated:true, completion:nil) 

Odpowiedz

54

w Swift 3

Jeśli chcesz, aby przejść do kontrolera tworzony programowo następnie to zrobić:

let newViewController = NewViewController() 
self.navigationController?.pushViewController(newViewController, animated: true) 

Jeśli chcesz nawigować do kontrolera na StoryBoard z identyfikatorem " newViewController”, to zrobić:

let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
let newViewController = storyBoard.instantiateViewController(withIdentifier: "newViewController") as! NewViewController 
     self.present(newViewController, animated: true, completion: nil) 
+0

" jak! NewViewController "nie jest potrzebny w opcjach scenorysu –

+0

tak, wiem, że jest opcjonalny, ale jeśli pokażemy, stanie się jasne, który kontroler widoku jest celem dla innego programisty –

8

Należy wcisnąć nowy viewcontroller używając aktualnego kontrolera nawigacji, nieobecne.

self.navigationController.pushViewController(nextViewController, animated: true) 
1

Więc jeśli przedstawisz kontroler widoku, nie pojawi się on w kontrolerze nawigacyjnym. To zajmie tylko cały ekran. W tym przypadku musisz utworzyć kolejny kontroler nawigacyjny i dodać do niego swój numer nextViewController i zaprezentować nowy kontroler navigationController.

Innym sposobem jest po prostu przesunięcie kontrolera widoku.

self.presentViewController(nextViewController, animated:true, completion:nil) 

Aby uzyskać więcej informacji sprawdź dokumentację Apple: - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/doc/uid/TP40006926-CH3-SW96

+0

' presentViewController' została zmieniona na 'obecny (loginController, animowany: true, zakończenie: nil) ' –

0
 OperationQueue.main.addOperation { 

        let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
        let newViewController = storyBoard.instantiateViewController(withIdentifier: "Storyboard ID") as! NewViewController 
         self.present(newViewController, animated: true, completion: nil) 

        } 

pracował dla mnie oddanie wewnątrz OperationQueue.main.addOperation, które będą wykonywane w głównym wątku

Powiązane problemy