无法投射类型' UINavigationController'到' UIViewController'在迅速

时间:2016-10-20 09:57:49

标签: ios swift uinavigationcontroller

我有一个导航控制器,用于我的父视图控制器以及我的子视图控制器。子视图控制器进入另外两个视图控制器,即" UserLoginViewController"和#34; RegisterVC"。我希望UserLogin中的子视图按钮执行一个Button动作,该动作又执行涉及父视图控制器及其导航控制器的segue。

这是我使用的代码:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if segue.identifier == Constants.embedSegue {
            let childViewController = segue.destinationViewController as! UserLoginViewController
            childViewController.delegate = self
        }
    }

从parentVC调用UserLoginVC。

我收到错误说

  

无法转换类型的值' UINavigationController' (0x109aa7860)来   ' Storey_Keeper.UserLoginViewController' (0x10645b810)。

帮助?

3 个答案:

答案 0 :(得分:5)

如果segue.destinationViewController已嵌入自己的UINavigationViewController,则

UserLoginViewController将为UINavigationController

你可以这样:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    if segue.identifier == Constants.embedSegue {

        if let navigationController = segue.destinationViewController as? UINavigationController {
            let childViewController = navigationController.topViewController as? UserLoginViewController
            childViewController?.delegate = self
        }
    }
}

我会建议反对强制施放。

答案 1 :(得分:0)

试试这个:

{{1}}

答案 2 :(得分:0)

 override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
        if segue.identifier == "segue_profile"
        {
            if let navigationController = segue.destination as? UINavigationController {
                let childViewController = navigationController.topViewController as? ProfileViewController
                childViewController?.userId = UserDefaults.standard.value(forKey: "userID") as! String
            }

        }
    }