我有一个导航控制器,用于我的父视图控制器以及我的子视图控制器。子视图控制器进入另外两个视图控制器,即" 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)。
帮助?
答案 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
}
}
}