0

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

放松似乎可以很好地消除我在 iPhone 上的弹出框,但是当我在 iPad 上尝试相同的操作时,弹出框仍然存在。

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

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

4

1 回答 1

0

好的。经过很长时间的努力,我设法想出了一个解决方案。我使用了 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
}
于 2015-05-03T00:57:24.357 回答