self.navigationController总是为零

时间:2016-01-25 22:11:45

标签: ios uinavigationcontroller swift2 uistoryboard

UI流程:

appdelegate

- >

LoginViewController(不在故事板中)

- >

导航控制器(在故事板中)

- >

PFQueryTableViewController(在故事板中)命名为" OrdersVC"

这是OrdersVC的导航控制器:

enter image description here

这是我的AppDelegate:

var window: UIWindow?

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    .....
    ....
    ...
    ..
    .

    // initial VC
    let VC = LoginViewController()

    window = UIWindow(frame: UIScreen.mainScreen().bounds)
    window!.rootViewController = VC
    window!.makeKeyAndVisible()

    return true
}

以上工作正常。然后,从LoginViewController,我然后尝试显示我的StoryBoard的初始VC,它是一个托管PFQueryTableViewController的导航控制器。请注意,LoginViewController不在StoryBoard中。

let destVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("OrdersVC") as! UITableViewController

// will throw "unexpectedly found nil"     
let navController = UINavigationController(rootViewController: destVC)
navController.pushViewController(destVC, animated: true)

// will throw "unexpectedly found nil"
self.presentViewController(navController, animated: true, completion: nil)

问题是在我的PFQueryTableViewController的viewDidLoad和viewDidAppear中,以下语句始终为nil:

// navitaionController is nil
self.navigationController!.navigationBar.translucent = false

那么我怎样才能在其导航控制器中正确实例化PFQueryTableViewController?

1 个答案:

答案 0 :(得分:3)

您正在实例化OrdersVC,而不是实例化其所嵌入的导航控制器,以及" initial"查看故事板的控制器。使用instantiateInitialViewController而不是使用标识符。

let nav = storyboard.instantiateInitialViewController()
self.window!.rootViewController = nav

混淆的原因是你是"取消链接"来自故事板的初始视图控制器和您的登录控制器。您必须将初始视图控制器添加回主窗口。