我的故事板中有3个项目。 1. viewController(A)连接到2.导航控制器和3. viewController(B)没有连接任何东西 所有3个项目都在故事板中设置了恢复标识符。
viewController(B)是初始视图控制器。 我正在B中尝试获取附加了A的导航控制器,但总是返回nil:
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyBoard.instantiateViewControllerWithIdentifier("viewControllerA") as! ViewControllerA
print(vc.navigationController?) // always prints nil
为什么!?
更新#1 我不能像视图控制器一样声明UINavigationController。我已经尝试将id为'myNavigationController'的navigationcontroller设置为storyboardID:
当故事板时,我收到此错误
let navigationController = storyBoard.instantiateViewControllerWithIdentifier("myNavigationController") as! UINavigationController
print(self.navigationController!) // fatal error: unexpectedly found nil while unwrapping an Optional value
我也尝试在恢复标识符中设置id,它早先在实例化行中被轰炸
@ColdLogic,看看我在整个项目中搜索该标识符时获得的点击次数:
答案 0 :(得分:5)
因为您从未实例化导航控制器,所以您实例化了视图控制器A.如果您希望设置导航控制器和视图控制器,就像它们在故事板中那样,您会想要这样的东西
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = storyBoard.instantiateViewControllerWithIdentifier("YourNavControllerIdentifier") as! UINavigationController
let vc = navigationController.topViewController as! ViewControllerA
您的代码直接实例化ViewControllerA类型的对象。除非您设置逻辑,否则默认情况下没有导航控制器。
答案 1 :(得分:4)
这为我工作了!
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let navigationController = storyBoard.instantiateViewController(withIdentifier: "HomeNavigationContoller") as! UINavigationController
let viewController = storyBoard.instantiateViewController(withIdentifier: "HomeViewController") as! HomeViewController
navigationController.pushViewController(messageVC, animated: true)
self.present(navigationController, animated: true, completion: nil)
答案 2 :(得分:0)
使用NavigationController
标识符访问NavigationController
并且ViewController A已经附加到它,因此它会自动加载到NavigationController