当我们访问View Controller的view属性时,它是否总是代表整个屏幕,或者它可以是部分的?
间接地说,View Controller是否可以拥有多个视图属性?
donkim是对的,但不要相信我的话;)
请参阅Rincewind的这篇文章:https://devforums.apple.com/thread/81930 以及其他Apple员工在论坛上发表的任何旧评论.
如果我理解你在说什么,你已经创建了另一个视图控制器(BlueViewController)并将其视图添加为另一个视图控制器的子视图?如果是这样,那么这将由文档覆盖 - 特别是说不要这样做因为它不受支持.
视图控制器旨在管理整个屏幕的内容.如果要进一步细分内容,则建议您使用UIViewController的子类以外的对象来管理这些子区域,并使用UIViewController子类管理这些对象.
另外我们有UIViewController类引用,它指出:
您可以使用UIViewController的每个实例来管理视图层次结构.典型的视图层次结构包括根视图 - 该类的视图属性中可用的引用 - 通常是一个或多个呈现实际内容的子视图.在iPhone和iPod touch上,根视图通常会填满整个屏幕,但在iPad上,此视图可能只会填充整个屏幕的一部分.在这两种情况下,视图控制器都负责管理整个视图层次结构,包括所有子视图.
根视图充当与视图控制器关联的所有其他视图的容器.您通常会为此视图定义框架以匹配应用程序窗口的大小,应用程序窗口本身应填充屏幕.但是,视图控制器还会根据需要调整帧大小以适应各种视图的存在,例如系统状态栏,导航栏或标签栏.
不幸的是,没有一个像我想的那样明确为什么 UIViewController做出这些假设以及何时打破它们可能是安全的.从我无法访问UIKit代码的地方来看,UIKit假定单个视图控制器将负责给定屏幕内容.因此,如果在单个窗口中有多个视图控制器可见,它会在某些情况下将-viewWillAppear:或-didRecieveMemoryWarning等消息发送到一个(或者可能只有一些)视图控制器.应该可以用至少几种不同的方式证明这一点,虽然我最近没有测试过所有这些,所以我将脱离其他用户报告的问题.嵌套视图控制器不会接收-didReceiveMemoryWarning如果在显示模态视图控制器并且模块随后被解除时发生旋转,则不会旋转多视图控制器的视图.视图控制器的视图有时会填满窗口并且是不透明的,因此在未覆盖的窗口区域中绘制的内容可能是未定义的.试图呈现一个未填满屏幕的模态视图控制器不会渲染底层视图,至少在iOS 3.1.x或我试过的最后一个版本中是这样.
试图直接回答hmthur的问题.UIViewController应该有一个单独的根视图(它的'view'属性),它填充窗口,可以处理调整大小以适应状态栏,标签栏等.该控制器可以具有该根视图的任意数量的子视图以及引用这些子视图的属性.
作为进一步的更新,请考虑Apple开发人员论坛上的" 创建容器UIViewController子类? " 这个线程(讨论设置parentViewController以构建自定义容器视图控制器).
所有UIKit ivars都被视为私有,并且不支持直接访问,包括通过setValue:forKey:进行访问.设置此ivar的方法也是私有的.
至于这个ivar [parentViewController],我会警告你它的行为可能会改变.
不幸的是,我对替代品没有任何好的建议,但是我们确实认识到创建容器视图控制器的难度.
| 归档时间: |
|
| 查看次数: |
735 次 |
| 最近记录: |