与导航视图控制器一起使用时,popoverPresentationController为nil

时间:2016-07-09 11:32:09

标签: ios xcode swift

在将视图嵌入导航控制器之前,此代码正常工作

if segue.identifier == "PopupInfo" {
        let controller = segue.destinationViewController as! PopoverInfoViewController
        controller.popoverPresentationController!.sourceRect = sender!.frame

    } 

然而,在添加导航控制器后,这个稍微编辑过的代码不再有效,因为popoverPresenetationController现在为零!我需要以编程方式设置sourceRect而不是故事板,因为发送者是表视图中单元格内的控件

if segue.identifier == "PopupInfo" {
        let navcontroller = segue.destinationViewController as! UINavigationController
        let controller = navcontroller.topViewController as! PopoverInfoViewController
        controller.popoverPresentationController!.sourceRect = sender!.frame

    } 

注意:controller不是nil,只是它的popoverPresentationController属性

1 个答案:

答案 0 :(得分:3)

您在PopoverInfoViewController中嵌入了UINavigationController。该导航控制器直接嵌入UIPopoverPresentationController中。它现在应该具有非零popoverPresentationController属性,因为它是直接嵌入弹出控制器的视图控制器。这些父视图控制器属性的设置不会传播通过第一个子视图控制器。这就是为什么navcontroller.popoverPresentationController将是非零的原因,而导航控制器的任何子项都将为popoverPresentationController为零。

您应该使用navcontroller.popoverPresentationController!.sourceRect = sender!.frame