2016-09-12 3 views
18

Я использую следующий код для программного перехода к другому ViewController. Он отлично работает, но он как-то скрывает navigation bar. Как это исправить? (навигационная панель создается embeding на по ViewController в navigation controller, если это имеет значение.)Быстрое программное переключение на другой контроллер/сцену просмотра

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

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

ответ

54

В Swift 3

Если вы хотите, чтобы перейти к контроллеру создан программно, то сделать это:

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

Если вы хотите перейти к контроллеру на StoryBoard с идентификатором " newViewController», то сделать это:

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

" as! NewViewController "не требуется в опции раскадровки –

+0

yeh Я знаю, что это необязательно, но если мы покажем, то станет ясно, какой диспетчер представлений предназначен для другого разработчика –

8

Вы должны нажать на новый ViewController с помощью регулятора тока навигации, нет.

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

Так что если вы представляете контроллер вида, он не будет отображаться в навигационном контроллере. Он просто займет полный экран. Для этого случая вам нужно создать еще один контроллер навигации и добавить свой nextViewController как root для этого и представить этот новый навигационный контроллер.

Другой способ - просто нажать контроллер вида.

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

Для получения дополнительной информации ознакомьтесь Apple, документацию: - https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/#//apple_ref/doc/uid/TP40006926-CH3-SW96

+0

' presentViewController' был переименован в 'настоящее (loginController, анимированный: true, завершение: 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) 

        } 

Он работал для меня положить внутри OperationQueue.main.addOperation, которые будут выполняться в основном потоке