//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方法之后不起作用,除非它被放入闭包中?
答案 0 :(得分:3)
我认为只有在用户点击确定后才能使用# Python 3 compatibility hack
try:
unicode('')
except NameError:
unicode = str
,在这种情况下:
popToRoot
注意:
// 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)
移到完成闭包中。