展开 segue 结果与主视图和详细视图不同

unwind segue result different with master and detail views

我是 swift 的新手,在主细节应用程序中展开 segues 时遇到了一些困难。

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

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

我发现问题在于,当以模态方式呈现时(例如在 iPhone 上),弹出窗口会自动解除并展开。然而,当呈现为真正的弹出窗口时,它们不会因展开转场而消失。有人可以帮我弄清楚如何管理这两种情况,以便只关闭弹出窗口。非常感谢您。

好的。经过长时间的研究,我设法想出了一个解决方案。我使用了 popoverpresentationcontroller 并将呈现控制器声明为委托。然后添加一个额外的函数强制 iPhone 使用弹出窗口代替模态显示,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
}