【问题标题】:unwind segue result different with master and detail views展开 segue 结果与主视图和详细视图不同
【发布时间】:2015-05-02 15:24:22
【问题描述】:

我对 swift 还很陌生,并且在主详细信息应用程序中解开 segues 时遇到了一些困难。

解除我在 iPhone 上的弹出框似乎可以正常工作,但是当我在 iPad 上尝试相同的操作时,弹出框仍然存在。

如果我将dismissViewControllerAnimated 添加到呈现viewController 的展开处理操作中,那么iPad 版本可以正常工作并关闭弹出框,但是iPhone 版本会关闭弹出框,然后关闭呈现弹出框的视图。即驳回两种观点。

我发现问题在于,当以 iPhone 等模式呈现时,弹出框会自动解除并展开。然而,当呈现为真正的弹出框时,它们不会以放松的方式解雇。有人可以帮我弄清楚如何管理这两种情况,以便只有弹出框会被解雇。非常感谢您。

【问题讨论】:

    标签: swift ios8 xcode6 popover unwind-segue


    【解决方案1】:

    好的。经过很长时间的努力,我设法想出了一个解决方案。我使用了 popoverpresentationcontroller 并将呈现控制器声明为委托。然后添加一个附加功能,强制 iPhone 使用 popover 代替模态演示,iPhone 和 iPad 的演示和关闭是一致的。代码如下。我只是在 if let vc 语句中使用了一个通用的 UIViewController,这样我就可以将它与嵌入在导航控制器中的弹出框一起使用。

    override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
        if let identifier = segue.identifier {
            switch identifier {
            case "My Segue Identifier" :
                if let vc = segue.destinationViewController as? UIViewController {
                    if let ppc = vc.popoverPresentationController {
                        ppc.delegate = self
                    }
                }
            default: break
            }
        }
    }
    

    另外你需要添加以下功能来防止在 iPhone 上出现模态显示:

    func adaptivePresentationStyleForPresentationController (controller:UIPresentationController)-> UIModalPresentationStyle {
        return UIModalPresentationStyle.None
    }
    

    【讨论】:

    • 也别忘了遵守呈现控制器中的 UIPopoverPresentationControllerDelegate
    猜你喜欢
    • 2017-12-14
    • 2012-10-12
    • 1970-01-01
    • 2012-08-10
    • 2017-03-26
    • 1970-01-01
    • 2012-08-17
    • 2016-05-14
    • 1970-01-01
    相关资源
    最近更新 更多