Вне AppDelegate, как я могу содержать UIViewController в UINavigationController, прежде чем я в основном выполню для него SegueWIthIdentifier?

Я понимаю концепцию в AppDelegate.

Основы выглядят следующим образом:

let mainStoryboard: UIStoryboard = UIStoryboard(name: “Main”, bundle: nil)

var mainViewController = mainStoryboard.instantiateViewControllerWithIdentifier(
“MainViewController”) as! UIViewController

var navController = UINavigationController(rootViewController: mainViewController)

self.window?.rootViewController = navController
self.window?.makeKeyAndVisible()

Это успешно сделает ваш mainViewController навигационным контроллером и будет работать так.

Я не хочу делать это в AppDelegate.

У меня есть UIViewController с именем A, который не содержится в UINavigationController. Что я делаю сейчас из A, так это performSegueWithIdentifier в другой UIViewController с именем B. Я хочу программно сделать B содержащимся в UINavigationController. Я не хочу добиваться этого в раскадровке. Это нужно делать программно.

Я предполагаю, что мне придется использовать mainStoryboard.instantiateViewControllerWithIdentifier(...) для создания экземпляра B, а затем обернуть его в UINavigationController где-то в A (предпочтительно там, где я планирую перейти к B). Тогда я доберусь до B каким-то другим способом, кроме performSegueWithIdentifier? Потому что, если я выполню переход, он не перейдет к B, который я завернул в UINavigationController.

Я надеюсь, что это было не слишком сложно, но я могу предложить детали, если что-то не имеет смысла.


person David    schedule 25.08.2015    source источник


Ответы (1)


Один из способов сделать это будет аналогичен тому, что у вас есть в вашем примере кода, за исключением фактического отображения нового контроллера представления. Допустим, у вас есть метод в контроллере представления A, который должен отображать контроллер представления B, вы можете сделать что-то вроде этого:

func showViewControllerB() {
    let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
    let viewControllerB = mainStoryboard.instantiateViewControllerWithIdentifier("ViewControllerB") as! ViewControllerB
    let navController = UINavigationController(rootViewController: viewControllerB)
    presentViewController(navController, animated: true, completion: nil)
}
person Eric    schedule 25.08.2015
comment
Ага, это точно оно. У меня было хорошее предчувствие, что это оно, но... я был в дороге, поэтому не мог подтвердить :P. Спасибо! - person David; 26.08.2015