Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 什么是;presentedViewController“;你的意思是什么?_Xcode_Uiviewcontroller - Fatal编程技术网

Xcode 什么是;presentedViewController“;你的意思是什么?

Xcode 什么是;presentedViewController“;你的意思是什么?,xcode,uiviewcontroller,Xcode,Uiviewcontroller,在Apple的开发人员文档中,UIViewController中presentedViewController的属性被描述为“由该视图控制器或其在视图控制器层次结构中的祖先之一呈现的视图控制器”。这令人困惑。“其祖先”是什么意思?有两个视图控制器,viewA和viewB。viewA显示viewB。现在,这就是文档所指的内容: 示例1(调用viewA.presentedViewController) 这将返回viewB,因为viewA已显示viewB 示例2(调用viewB.presentedVi

在Apple的开发人员文档中,UIViewController中presentedViewController的属性被描述为“由该视图控制器或其在视图控制器层次结构中的祖先之一呈现的视图控制器”。这令人困惑。“其祖先”是什么意思?

有两个视图控制器,viewA和viewB。viewA显示viewB。现在,这就是文档所指的内容:

示例1(调用viewA.presentedViewController) 这将返回viewB,因为viewA已显示viewB

示例2(调用viewB.presentedViewController) 这将返回viewA,因为viewA是viewB的祖先。换句话说,将这两个视图想象成一条直线。viewB是第二行,而viewA是第一行。因此,视图的祖先就是其自身后面的视图


对viewB的此函数调用返回viewA的唯一原因是viewB未显示任何其他视图控制器。或者换句话说,viewB位于层次结构的顶部。viewB前面没有视图。

这个问题确实很老了,但它仍然是我在谷歌搜索中最热门的问题,而现有的答案是错误的,让事情变得更具误导性

此属性始终返回显示的视图控制器(或nil),它永远不会返回祖先视图控制器。对祖先的引用意味着,如果您调用它的视图控制器本身没有显示任何视图控制器,那么它将沿着层次结构查看是否有任何父视图控制器显示任何内容

举个具体的例子——假设您有ContentViewController,它包含在UINavigationController中。NavigtionController当前正在显示另一个视图控制器(例如,可能是UIAlertViewController)

在这种情况下,ContentViewController和NavigationController的presentedViewController属性都将返回NavigationController呈现的UIAlertController。当此项被取消时,两项都将返回零

因此,要使Apple文档中的行更加清晰:
“此视图控制器显示的视图控制器,或视图控制器层次结构中其祖先之一显示的[视图控制器]。

Self-maybe??我同意,这很混乱。什么时候有用?我现在正在处理一些调用这个的遗留代码,我无法确定他们为什么认为它会有用。也许调用来自一个控制器,它引用了视图控制器,控制器需要知道它显示了什么视图?我从来没有发现显示视图控制器的任何用途,但我使用了父视图控制器,这肯定是不正确的答案。该属性始终返回一个显示的视图控制器(或nil),它只是由当前视图控制器显示或由当前视图控制器的一个祖先显示的控制器。我在另一个答案中添加了全部细节。