【问题标题】:Warning: Attempt to present ViewController on ViewController which is already presenting ViewController警告:尝试在已经呈现 ViewController 的 ViewController 上呈现 ViewController
【发布时间】:2015-12-01 00:42:18
【问题描述】:

我有一个带有 3 个 UIButtons 的工具栏的视图控制器,可以打开一个新的视图控制器作为弹出框。我在 Storyboard 中创建了 segues 并选择了“Present as Popover”。弹出框工作,但是当用户在弹出框当前打开时点击另一个按钮时,我收到此错误:

Warning: Attempt to present <Fingerpainter.OpacityViewController: 0x79095110>  on <Fingerpainter.DrawingViewController: 0x7b278000> which is already presenting <Fingerpainter.BrushSizeViewController: 0x79573770>

有没有办法确保在打开新的弹出框之前关闭所有弹出框?这是我在主 ViewController(包含工具栏)中的 prepareForSegue 方法:

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
    }

}

【问题讨论】:

    标签: swift uiviewcontroller ios9 swift2.1


    【解决方案1】:

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

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

    不幸的是,有一个长期存在的巨大错误,即使将passthroughViews 设置为nil 也不会阻止工具栏按钮被点击。解决方法是延迟执行。 很多 我的弹出框代码添加了这种东西:

    if let pop = popoverPresentationController {
        delay(0.1) {
            pop.passthroughViews = nil
        }
    }
    

    (这里描述了delayhttps://stackoverflow.com/a/24318861/341994)。

    【讨论】:

      猜你喜欢
      • 2015-04-21
      • 2016-10-20
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 2017-01-07
      相关资源
      最近更新 更多