Извън AppDelegate, как да съдържам UIViewController в UINavigationController, преди да изпълня основно `performSegueWIthIdentifier` към него?

Разбирам концепцията в 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 NavigationController и ще функционира по този начин.

Не искам да правя това в AppDelegate.

Имам UIViewController, наречен A, който не се съдържа в UINavigationController. От A това, което правя сега, е performSegueWithIdentifier към друг UIViewController, наречен B. Искам програмно да направя B, съдържащ се в UINavigationController. Не искам да постигна това в Storyboard. Това трябва да стане програмно.

Предполагам, че ще трябва да използвам 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