UIAlertController:在UIAlertAction(按“确定”按钮)时推送视图控制器

时间:2018-08-18 11:01:57

标签: swift viewcontroller uialertcontroller pushviewcontroller

我想通过在用户点击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”已成功打印。但是,新的viewController不会出现(相同的命令可在未在此设置之外执行时显示第二个视图控制器)。

我的理论是,当调用此动作时,UIAlertController位于初始视图控制器的顶部,这禁止从初始视图控制器调用命令pushViewController-是正确的吗? ?

我该如何解决?

注意:This即使在将代码更新为新的Swift之后也无法正常工作。即使这样,上面的命令也应该有一个解决方案,因为它们在每种情况下都可以推入视图控制器。

3 个答案:

答案 0 :(得分:0)

如果您的代码执行时没有崩溃,我想您的navigationController为nil。要进行检查,请在

处设置一个断点
print("called pushViewController")

并检查是否

self.navigationController

是否为零。如果为nil,则说明您没有导航控制器,因此无法将新的vc推送到堆栈中。下面的行仍然会执行,您的情况似乎会发生这种情况。

答案 1 :(得分:0)

在点击return text.replaceAll("([AEIOUY])", "$1OB");

时以此替换代码
ok

希望这对您有帮助

答案 2 :(得分:0)

正如您所解释的,首先我建议您使用警报样式 .actionsheet 而不是 .alert

当您在答案之一中评论为 navigationController 为零时,则需要将导航控制器添加到要重定向的特定视图控制器。请按照以下步骤操作:

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