在将视图嵌入导航控制器之前,此代码正常工作
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属性
答案 0 :(得分:3)
您在PopoverInfoViewController
中嵌入了UINavigationController
。该导航控制器直接嵌入UIPopoverPresentationController
中。它现在应该具有非零popoverPresentationController
属性,因为它是直接嵌入弹出控制器的视图控制器。这些父视图控制器属性的设置不会传播通过第一个子视图控制器。这就是为什么navcontroller.popoverPresentationController
将是非零的原因,而导航控制器的任何子项都将为popoverPresentationController
为零。
您应该使用navcontroller.popoverPresentationController!.sourceRect = sender!.frame