在prepareForSegue中获取UIPopoverController参考?

时间:2014-08-24 22:27:16

标签: ios interface-builder segue uipopovercontroller

我在Interface Builder中为我的StoryBoard Segue选择了Present as Popover

enter image description here

如何在prepareForSegue中引用UIPopoverController?

我试过这样,但它不在if语句中。

    if segue is UIStoryboardPopoverSegue {
        let popoverSegue = segue as UIStoryboardPopoverSegue
        simpleTableViewController.popoverController = popoverSegue.popoverController
    }

更新

如果你需要popovercontroller,只是为了解雇它,那么解雇自适应视图控制器的方法是:

self.dismissViewControllerAnimated(true, completion: nil)

2 个答案:

答案 0 :(得分:7)

使用自适应segue Present作为Popover:

要获得iOS 7上UIPopoverController的引用,您需要检查segue class中的prepareForSegue,看看它是否为UIStoryboardPopoverSegue。如果是,请通过popoverController属性访问popover。如果您需要在该视图控制器中将其关闭,请将其存储在目标视图控制器中。

对于iOS 8,UIPopoverController已不复存在,已被UIPopoverPresentationController取代。您可以通过popoverPresentationController直接在视图控制器中访问它,您可以通过dismissViewControllerAnimated轻松解除弹出窗口。

因此,当使用自适应segue时,如果您在iOS 7上运行应用程序,则segue类将为UIStoryboardPopoverSegue,而在iOS 8上将为UIStoryboardPopoverPresentationSegue。您不需要使用旧的已弃用的popover segue,它非常简洁,自适应segue会自动转换为旧API,以便向后兼容Universal Storyboards。

答案 1 :(得分:0)

你不应该检查segue的类型,而应该检查segue标识符。

if segue.identifier == "popover" {
    let popoverSegue = segue as UIStoryboardPopoverSegue
    simpleTableViewController.popoverController = popoverSegue.popoverController
}