如何在Swift

时间:2016-06-30 12:05:02

标签: swift uiviewcontroller uinavigationcontroller

我的故事板中有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,看看我在整个项目中搜索该标识符时获得的点击次数:

enter image description here

3 个答案:

答案 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