在Apple的开发人员文档中,UIViewController中的presentViewController属性被描述为“此视图控制器呈现的视图控制器,或视图控制器层次结构中的一个祖先”。这令人困惑。 “它的祖先”是什么意思?
答案 0 :(得分:2)
这个问题确实很老,但是仍然是我搜索中最受Google追捧的问题,现有的答案是错误的,并且使事情更加容易引起误解。
此属性始终返回显示的视图控制器(或为nil),它将永远不会返回祖先的视图控制器。祖先的意思是,如果您调用的视图控制器本身未提供任何视图控制器,那么它将沿层次结构前进,以查看是否有任何父视图控制器正在提供任何东西。
举一个具体的例子-假设您有ContentViewController,它包含在UINavigationController中。 NavigtionController当前正在提供另一个视图控制器(例如,可能是UIAlertViewController)。
在这种情况下,ContentViewController和NavigationController的presentedViewController属性将返回由NavigationController呈现的UIAlertController。取消此选项后,它们两个都将返回nil。
因此,为了使Apple Docs中的行更加清晰: “由该视图控制器提供的视图控制器,或由其在视图控制器层次结构中的祖先之一提供的视图控制器。”
答案 1 :(得分:1)
有两个视图控制器,viewA和viewB。 viewA呈现viewB。现在这就是文档所指的内容:
这将返回viewB,因为viewA 显示 viewB
这将返回viewA,因为viewA是viewB的祖先。换句话说,想象一下这两个视图。 viewB排在第二位,而viewA排在第一位。因此,视图的祖先是背后的视图。
这个函数调用viewB返回viewA的唯一原因是因为viewB没有呈现任何其他视图控制器。或者换句话说,viewB位于层次结构的顶部。 viewB中没有前面的 。