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