我想通过在用户点击 UIAlertController 弹出消息的特定按钮时调用pushViewController
来打开一个新的视图控制器。
我尝试了以下方法(代码在rootViewController中(:
let alertController = UIAlertController(title: title, message: "My message", preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction(UIAlertAction(title: "Ok", style: UIAlertActionStyle.default, handler: {action in
let vc = ViewController2()
self.navigationController?.pushViewController(vc, animated: true)
print("called pushViewController")
}))
消息"调用 pushViewController"已成功打印。但是,我不会出现新的视图控制器(当未在此设置之外执行时,相同的命令适用于显示第二个视图控制器(。
我的理论是,当调用此操作时,UIAlertController
位于初始视图控制器的顶部,这禁止从初始视图控制器调用命令pushViewController
- 这是对的吗?
我该如何解决这个问题?
注意:即使在将代码更新到新的 Swift 之后,这仍然不起作用。尽管如此,上述命令也应该有一个解决方案,因为它们在所有其他情况下都可以推送视图控制器。
如果你的代码在没有崩溃的情况下执行,我猜你的导航控制器是零。若要检查这一点,请将断点设置为
print("called pushViewController")
并检查是否
self.navigationController
是否为零。如果为 nil,则您没有导航控制器,因此无法在堆栈上推送新的 vc。以下行仍将执行,这似乎发生在您的案例中。
在点击ok
时用这个替换你的代码
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let dVC: ViewController2 = storyboard.instantiateViewController(withIdentifier: "Your vc2 stroryboard identifier") as! ViewController2
self.navigationController?.pushViewController(dVC, animated: true)
希望这对你有帮助
正如你所解释的,首先我建议你使用警报样式的.actionsheet而不是.alert。
正如您在其中一个答案中评论的那样,导航控制器为零,那么您需要将导航控制器添加到要重定向的特定视图控制器。执行以下操作:
选择视图控制器 ->编辑器 -> 嵌入 ->导航控制器