2016-11-02 7 views
1

Моего перехода к следующему представлению, как это:presentViewController не имеет navigationController быстрого

if let navigationController = navigationController { 
     if let storyboard:UIStoryboard = UIStoryboard(name: "myStoryboard", bundle: nil) { 

      if let vc = storyboard.instantiateViewControllerWithIdentifier("myViewController") as? MyViewController { 
       dispatch_async(dispatch_get_main_queue()) { 
        navigationController.presentViewController(vc, animated: true, completion: nil) 
       } 
      } 
     } 
    } 

Это прекрасно работает. Я хочу такой переход. Но когда я называю следующий код в MyViewController, то NavigationController равна нулю:

if let navigationController = navigationController { 
     print("yeah i have a nc") 
    } else { 
     print("its nil") //this will call 
    } 

Когда я использую navigationController.pushViewController(vc, animated: true) все работает отлично. Но я действительно хочу переход. Это неправильная реализация на моей стороне или presentViewController всегда без навигацииController? Если да, что я могу сделать?

My Controller A уже встроен в навигационный контроллер. Я использую navigationController.presentViewController для перехода в MyViewController. И от MyViewController я хочу, чтобы подтолкнуть к следующему ViewController C.

+0

Хотите представить ViewController, что связанный с navigationController? поэтому, после представления, вы можете нажать и поп ... это дело? –

+0

Да, это так. Мой контроллер A уже встроен в navigationController. Я использую navigationController.presentViewController для получения MyViewController. И из MyViewController я хочу нажать на следующий ViewController – kuzdu

+0

Итак, я предполагаю, что если вы попытаетесь перейти к другому viewController из представленного контроллера, он будет представлен вместо push, правильно? –

ответ

2

решение, которое работает для меня

Я не знаю, почему, но когда вы используете presentViewController вы должны определить новый (?) root для вашего навигационного контроллера.

В этом контексте я понял ответ Ахмада Фса.

if let storyboard:UIStoryboard = UIStoryboard(name: "myStoryboard", bundle: nil) { 
     if let vc = storyboard.instantiateViewControllerWithIdentifier("MyViewController") as? MyViewController { 
      if let navController:UINavigationController = UINavigationController(rootViewController: vc) { 
       dispatch_async(dispatch_get_main_queue()) { 
        self.presentViewController(navController, animated:true, completion: nil) 
       } 
      } 
     } 
    } 

СВИФТ 3

let storyboard = UIStoryboard(name: UIConstants.Storyboards.registration, bundle: nil) 
    if let vc = storyboard.instantiateViewController(withIdentifier: "YourViewControllerIdentifier") as? YourViewController { 

     let navigationController = UINavigationController(rootViewController: vc) 
     DispatchQueue.main.async { 
      navigationController.present(vc, animated: true) 
     } 
    } 

Я нашел "свое" решение here

 Смежные вопросы

  • Нет связанных вопросов^_^