【发布时间】:2015-03-31 16:19:52
【问题描述】:
有问题的问题涉及AddItemView,它由其代表以模态方式呈现并包含一个tableView。当用户从 tableView 中选择一个项目时,它会触发委托上的操作。根据来自服务器的响应,委托可能会在当前模式之上呈现另一个模式视图或 UIAlertView。
重要提示:此 UIAlertView 需要在模式仍在屏幕上时呈现。包含 tableView 的模态呈现视图在用户选择后无法关闭,因为用户需要能够从 table 中选择多个项目,并一个一个将它们发送回委托进行处理。
目前,UIAlerView 没有显示,我怀疑这是因为已经呈现的模式阻止了这种情况。当委托位于模态下方且不关闭该模态时,是否有一种解决方法可以从委托中呈现 UIAlertView?
UIAlertView 当前由委托显示,而委托位于模态下:
var alert = UIAlertController(title: "Error", message: "Error message from server", preferredStyle: UIAlertControllerStyle.Alert)
alert.addAction(UIAlertAction(title: "actionOne", style: .Default, handler: { action in
// perform some action
}))
alert.addAction(UIAlertAction(title: "actionTwo", style: .Destructive, handler: { action in
// perform some action
}))
self.presentViewController(alert, animated: true, completion: nil)
这是委托呈现 UIAlertView 时返回的错误:
Warning: Attempt to present <UIAlertController: 0x156da6300> on <productionLINK_Scanner.ContainerContents: 0x156e65b20> whose view is not in the window hierarchy!
如果可能,请使用 Swift 提供答案。
【问题讨论】:
-
您尝试在控制器生命周期中的哪个位置显示警报控制器?将控制器放在另一个控制器之上是没有问题的。此外,您不需要在处理程序中关闭警报控制器,它会自动关闭。
-
@LeoNatan 当用户在呈现的模式的 tableView 中选择一行时,UIAlertView 会从委托中呈现。需要注意的是,模态呈现的 tableView (它实际上是嵌入在 UIView 中的 tableView )需要留在屏幕上 - 它不能被关闭,因为用户需要能够从表中选择多个项目并将每个项目发回给代表。
标签: swift delegates uialertview modalviewcontroller