UIAlertController:在UIAlertAction上推送视图控制器(点击"Ok"按钮)



我想通过在用户点击 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

正如您在其中一个答案中评论的那样,导航控制器为零,那么您需要将导航控制器添加到要重定向的特定视图控制器。执行以下操作:

选择视图控制器 ->编辑器 -> 嵌入 ->导航控制器

最新更新