首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >警告:尝试在已经呈现ViewController的ViewController上显示ViewController

警告:尝试在已经呈现ViewController的ViewController上显示ViewController
EN

Stack Overflow用户
提问于 2015-12-01 00:42:18
回答 1查看 973关注 0票数 0

我有一个带有3 UIButtons的工具栏的视图控制器,它作为弹出器打开一个新的视图控制器。我在“故事板”中创建了“故事板”,并选择了“作为波波佛的礼物”。弹出操作正常,但当用户在当前打开的弹出窗口时单击另一个按钮时,我会得到以下错误:

代码语言:javascript
复制
Warning: Attempt to present <Fingerpainter.OpacityViewController: 0x79095110>  on <Fingerpainter.DrawingViewController: 0x7b278000> which is already presenting <Fingerpainter.BrushSizeViewController: 0x79573770>

有没有办法在打开一个新的之前确保所有的爆米花都关闭了?下面是主prepareForSegue (包含工具栏)中的ViewController方法:

代码语言:javascript
复制
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
    }

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-01 01:33:22

有没有办法在打开一个新的之前确保所有的弹出框都关闭了?

情况正好相反。这是你的工作,以确保当弹出是存在的,一个按钮,召唤另一个弹出是不可触的。您可以通过禁用按钮来做到这一点,但更常见的是,为了协调按钮的禁用和弹出器的存在,可以通过调整popover表示控制器的passthroughViews来完成。

不幸的是,存在一个巨大且长期存在的错误,即使将passthroughViews设置为nil也不能阻止工具栏按钮的可触性。解决办法是延迟完成。我的很多流行代码都添加了这样的东西:

代码语言:javascript
复制
if let pop = popoverPresentationController {
    delay(0.1) {
        pop.passthroughViews = nil
    }
}

(此处描述delayhttps://stackoverflow.com/a/24318861/341994)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34010692

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档