首页 » iOS编程基础:Swift、Xcode和Cocoa入门指南 » iOS编程基础:Swift、Xcode和Cocoa入门指南全文在线阅读

《iOS编程基础:Swift、Xcode和Cocoa入门指南》13.2 关系可见性

关灯直达底部

对象可以通过其在所包含的结构中的位置获取自动看到彼此的能力。在考虑如何向一个对象提供另一个对象的引用前,请先看看它们之间是否存在从一个到另一个的引用链。

比如,子视图可以通过其superview属性看到其父视图。父视图可以通过其subviews属性看到其所有子视图,并且可以通过该子视图的tag属性(调用viewWithTag:)获取到特定的子视图。窗口中的子视图可以通过其window属性看到其窗口。这样,通过这些属性并沿着视图层次体系向上或向下查找,一个对象可以获得所需的引用。

与之类似,响应器(参见第11章)可以通过nextResponder方法看到响应器链中的下一个对象,这意味着,根据响应器链的结构,视图控制器的主视图可以看到视图控制器。如下代码来自于我所编写的一个应用,我从一个视图开始沿着视图层次体系获得了负责整个场景的视图控制器引用(第5章也介绍了类似的示例):


var r = sender as! UIResponderrepeat { r = r.nextResponder! } while !(r is UIViewController)  

与之类似,视图控制器本身也是层次体系的一部分,因此也可以看到彼此。如果某个视图控制器当前正通过另一个视图控制器展现了一个视图,那么后者就是前者的presentedViewController,前者是后者的presentingViewController。如果某个视图控制器是UINavigationController的孩子,那么后者就是其navigationController。UINavigationController的可见视图是由其visibleViewController所控制的。你可以从这些视图中的任何一个通过其view属性获得视图控制器的view,诸如此类。

所有这些关系都是公开的。如果能够获得这些结构或类似结构中的任何一个对象的引用,那么你就可以通过引用链在整个结构中导航,并且可以操纵结构中的任何其他对象。