为什么popviewcontroller不会在提醒后的presentviewcontroller之后工作?

时间:2016-08-03 16:41:35

标签: ios swift

//Event created alert
let alert = UIAlertController(title: "Event Created", message: "Event successfully created", preferredStyle: UIAlertControllerStyle.Alert);
alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler:nil));
self.presentViewController(alert, animated: true, completion: nil);

//Pop back to table
self.navigationController!.popToRootViewControllerAnimated(true);

在这段代码中,我创建了一个警报,并在警报之后直接使用popToRootViewControllerAnimated方法。由于某些原因,这不起作用,我找到的解决方法是在presentViewController的完成内调用该方法。

为什么pop方法在presentViewController方法之后不起作用,除非它被放入闭包中?

2 个答案:

答案 0 :(得分:3)

我认为只有在用户点击确定后才能使用# Python 3 compatibility hack try: unicode('') except NameError: unicode = str ,在这种情况下:

popToRoot

注意:

  • 你真的不需要在swift中使用// Created the alert let alert = UIAlertController(title: "Event Created", message: "Event successfully created", preferredStyle: UIAlertControllerStyle.Alert) // Create the action let OKAction = UIAlertAction(title: "OK", style: .Default) { (action: UIAlertAction!) -> Void in self.navigationController!.popToRootViewControllerAnimated(true); } // Add the action alert.addAction(OKAction) // Present the alert self.presentViewController(alert, animated: true, completion: nil)

答案 1 :(得分:1)

当您调用self.presentViewController(alert, animated: true, completion: nil)时,viewController将执行演示。当它正在进行时,您不能执行任何其他转换/演示。

实际上,在我的机器上运行代码时,我得到了这个日志:

  

popToViewController:transition:在发生现有转换或演示时调用;导航堆栈不会更新。

这应该很清楚地解释自己。您应该将此行self.navigationController!.popToRootViewControllerAnimated(true)移到完成闭包中。