У PresentViewController нет быстрого навигации.

Мой переход к следующему виду выглядит так:

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 всегда без навигационного контроллера? Если да, что я могу сделать?

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


person kuzdu    schedule 02.11.2016    source источник
comment
Вы хотите представить viewController, связанный с navigationController? Итак, после презентации вы можете нажать и поп... так ли это?   -  person Ahmad F    schedule 02.11.2016
comment
Да, это так. Мой контроллер A уже встроен в navigationController. Я использую navigationController.presentViewController, чтобы получить MyViewController. И из MyViewController я хочу перейти к следующему ViewController   -  person kuzdu    schedule 02.11.2016
comment
Итак, я предполагаю, что если вы попытаетесь перейти к другому viewController из представленного контроллера, он будет представлен вместо нажатия, верно?   -  person Ahmad F    schedule 02.11.2016
comment
Что вы имеете в виду под этим будет представлять вместо толчка? Когда я использую push, все в порядке. У меня есть navigationController в моем следующем VC. Когда я использую presentViewController, у меня его не было.   -  person kuzdu    schedule 02.11.2016
comment
не могли бы вы сделать скриншот вашей раскадровки? это очень поможет!   -  person Ahmad F    schedule 02.11.2016
comment
В соответствии с этим метасообщение: вам следует вернуть свой вопрос в исходную форму. При желании вы можете написать ответ на вопрос самостоятельно или принять ответ. НИКОГДА не включайте ответ в свой вопрос.   -  person Honey    schedule 09.11.2016
comment
Извините, я изменил это   -  person kuzdu    schedule 09.11.2016


Ответы (1)


РЕШЕНИЕ, КОТОРОЕ МНЕ ПОНРАВИЛОСЬ

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

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

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)
                }
            }
        }
    }

SWIFT 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)
        }
    }

Я нашел «свое» решение здесь

person kuzdu    schedule 09.11.2016