我有一个带有3 UIButtons的工具栏的视图控制器,它作为弹出器打开一个新的视图控制器。我在“故事板”中创建了“故事板”,并选择了“作为波波佛的礼物”。弹出操作正常,但当用户在当前打开的弹出窗口时单击另一个按钮时,我会得到以下错误:
Warning: Attempt to present <Fingerpainter.OpacityViewController: 0x79095110> on <Fingerpainter.DrawingViewController: 0x7b278000> which is already presenting <Fingerpainter.BrushSizeViewController: 0x79573770>有没有办法在打开一个新的之前确保所有的爆米花都关闭了?下面是主prepareForSegue (包含工具栏)中的ViewController方法:
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
let identifier = segue.identifier ?? ""
let popoverPresentationController = segue.destinationViewController.popoverPresentationController
popoverPresentationController!.delegate = self
switch identifier {
case Storyboard.BrushSizeSegueIdentifier:
if let brushSizeViewController = popoverPresentationController?.presentedViewController as? BrushSizeViewController {
// set properties in brushSizeViewController
}
case Storyboard.OpacitySegueIdentifier:
if let opacityViewController = popoverPresentationController?.presentedViewController as? OpacityViewController {
//set properties in opacityViewController
}
case Storyboard.ColorSegueIdentity:
if let colorViewController = popoverPresentationController?.presentedViewController as? ColorViewController {
//set properties in colorViewController
}
default:
break
}}
发布于 2015-12-01 01:33:22
有没有办法在打开一个新的之前确保所有的弹出框都关闭了?
情况正好相反。这是你的工作,以确保当弹出是存在的,一个按钮,召唤另一个弹出是不可触的。您可以通过禁用按钮来做到这一点,但更常见的是,为了协调按钮的禁用和弹出器的存在,可以通过调整popover表示控制器的passthroughViews来完成。
不幸的是,存在一个巨大且长期存在的错误,即使将passthroughViews设置为nil也不能阻止工具栏按钮的可触性。解决办法是延迟完成。我的很多流行代码都添加了这样的东西:
if let pop = popoverPresentationController {
delay(0.1) {
pop.passthroughViews = nil
}
}(此处描述delay:https://stackoverflow.com/a/24318861/341994)。
https://stackoverflow.com/questions/34010692
复制相似问题