Ios 无法强制转换类型为';UINavigationController';至';UIViewController';迅速地

Ios 无法强制转换类型为';UINavigationController';至';UIViewController';迅速地,ios,swift,uinavigationcontroller,Ios,Swift,Uinavigationcontroller,我的父视图控制器和子视图控制器都有一个导航控制器。子视图控制器分为两个其他视图控制器,即“UserLoginViewController”和“RegisterVC”。我希望UserLogin中的子视图按钮执行一个按钮操作,该操作反过来执行一个涉及父视图控制器及其导航控制器的序列 这是我使用的代码: override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { if segue.ident

我的父视图控制器和子视图控制器都有一个导航控制器。子视图控制器分为两个其他视图控制器,即“UserLoginViewController”和“RegisterVC”。我希望UserLogin中的子视图按钮执行一个按钮操作,该操作反过来执行一个涉及父视图控制器及其导航控制器的序列

这是我使用的代码:

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)

帮助?

试试这个:

 let nav = segue.destinationViewController as! UINavigationController
 let childViewController = nav.viewControllers[1] as! UserLoginViewController
试试这个:

 let nav = segue.destinationViewController as! UINavigationController
 let childViewController = nav.viewControllers[1] as! UserLoginViewController

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
        }
    }
}

我建议不要强制转换。如果您的
UserLoginViewController
嵌入到自己的
UINavigationController中,destinationViewController
将是一个
UINavigationViewController

 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
            }

        }
    }
你可以这样得到它:

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
        }
    }
}


我建议不要强制强制强制转换。

但是UserLoginViewController不是我的TopViewController ID您尝试了吗?无法将“Storey\u Keeper.HomePageViewController”类型的值转换为“Storey\u Keeper.UserLoginViewController”无法将“Storey\u Keeper.HomePageViewController”类型的值转换为“Storey\u Keeper.UserLoginViewController”是我检查您连接的segue连接并重试此代码时遇到的错误。但是UserLoginViewController不是我的TopViewControllerID您是否尝试此操作?无法将“Storey\u Keeper.HomePageViewController”类型的值强制转换为“Storey\u Keeper.UserLoginViewController”类型的值强制转换为“Storey\u Keeper.HomePageViewController”“Storey\u Keeper.UserLoginViewController”是我收到的错误。请检查您连接的segue连接并重试此代码。因为
destinationViewController
是导航控制器。因为
destinationViewController
是导航控制器。UserLoginViewController不是该导航的topViewController控制器。看看你是如何连接segue的。您如何介绍UserLoginViewController?MODALY或push?我通过push进行演示。请确保将segue连接到UserLoginViewController,而不是连接到包含它的navigationcontroller。但UserLoginVC仍然不是连接到导航控制器的。这是堆栈上的第二个。UserLoginViewController不是该导航控制器的topViewController。请查看您是如何连接segue的。您如何介绍UserLoginViewController?MODALY或push?我通过push进行演示。请确保将segue连接到UserLoginViewController,而不是连接到包含它的navigationcontroller。但UserLoginVC仍然不是连接到导航控制器的。这是堆栈上的第二个。
 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
            }

        }
    }