Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.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
视图控制器在iPhone SDK中是如何工作的?_Iphone_Uiviewcontroller_Model View Controller - Fatal编程技术网

视图控制器在iPhone SDK中是如何工作的?

视图控制器在iPhone SDK中是如何工作的?,iphone,uiviewcontroller,model-view-controller,Iphone,Uiviewcontroller,Model View Controller,我刚刚开始开发iPhone应用程序,我对用户界面的“视图控制器”方面的工作方式感到非常困惑 我在开发中心做了“你的第一个iPhone应用程序”教程。它让您设置自己的视图控制器类,然后使用initWithNibName初始化它。因此,nib文件似乎包含视图控制器。但是也可以有一个nib文件,它只有一个视图,而不是一个视图控制器。例如,如果您设置了一个TabBarController,然后导航到除第一个选项卡以外的任何选项卡,则会出现一个灰色框,上面显示“视图”,如果双击该选项卡,您可以设置一个视图

我刚刚开始开发iPhone应用程序,我对用户界面的“视图控制器”方面的工作方式感到非常困惑

我在开发中心做了“你的第一个iPhone应用程序”教程。它让您设置自己的视图控制器类,然后使用initWithNibName初始化它。因此,nib文件似乎包含视图控制器。但是也可以有一个nib文件,它只有一个视图,而不是一个视图控制器。例如,如果您设置了一个TabBarController,然后导航到除第一个选项卡以外的任何选项卡,则会出现一个灰色框,上面显示“视图”,如果双击该选项卡,您可以设置一个视图(但它只是一个视图,不是视图控制器,对吗?),那么视图是视图控制器的子类还是视图控制器的子类

另一件我很难理解的事情是嵌套视图控制器。我理解您使用视图控制器(至少从本教程中)的方式是,您创建自己的自定义视图控制器(或者它实际上是视图控制器?在本教程中,我看不到myViewController实际上在哪里声明为扩展UIViewController),其中包含所有委托方法,然后使用initWithNibName将现有视图控制器加载到自定义视图控制器中。(到目前为止是否正确?)。因此,我加载了nibName文件,并将其粘贴到我自己的根视图控制器中。现在,我如何访问所有“内部”视图控制器,以便为它们分配委托方法?还是建议将根视图控制器作为其自身视图和所有辅助视图控制器视图的代理

这是另一个例子。我计划有一个TabBarController,其中对于某些选项卡,该选项卡的视图控制器将是NavigationController。我对导航控制器的理解是,当您要在层次结构中向下钻取时,必须以编程方式将视图推到堆栈顶部。假设我推送的视图是我最初在Interface Builder中创建的视图(并使用initWithNibName加载),但显示视图的空间当然小于创建视图时可用的空间(因为当我创建它时,它是在一块空白的石板上,而当我显示它时,有一个导航栏和一个选项卡栏占用了部分屏幕。)那么视图控制器会自动调整视图大小以进行补偿吗?(IIRC,文档的一部分确实提到自动调整大小,但似乎由于纵横比的变化,缩放到合适的大小会使文本看起来“被压扁”。)


最后,是否有一些教程或解释清楚地解释了视图控制器是如何工作的?这也可能帮助我回答我的问题。

视图控制器只是处理视图控制的对象

XIB文件不“包含”视图控制器。相反,它通常会告诉XIB,它最终将连接到哪个视图控制器——这就是initWithNib调用所做的,创建一个视图控制器,从XIB中取出视图,然后将视图控制器连接到XIB说它应该连接到视图部分的位置

从技术上讲,当您使用导航控制器或选项卡栏时,会有嵌套的视图控制器,但您自己的视图控制器基本上会被调用,就好像它是顶层一样,因为这些容器知道它们将容纳其他视图控制器

至于大小调整-它不是像素大小调整,而是容器大小调整。视图控制器调整它连接到的主视图的大小,然后视图中任何元素的自动大小调整行为决定它们的大小调整方式-标签之类的一些东西可能会四处移动,但默认情况下不会收缩。如果单击IB中的标尺选项卡,您可以可以查看视图中任何对象的当前自动调整大小行为-两端带有箭头的中心线告诉您对象是否允许调整大小,以及在哪个方向。正方形外侧的线告诉您对象将“粘住”哪一侧到,这意味着无论容纳对象的容器如何调整大小,对象将与这些边保持相同的距离


我不确定IB的最佳书籍是什么,但如果你有一本好的基本的Cocoa书籍来解释自动调整大小的行为,你可能不会错。

视图控制器只是处理视图控制的对象

XIB文件不“包含”视图控制器。相反,它通常会告诉XIB,它最终将连接到哪个视图控制器——这就是initWithNib调用所做的,创建一个视图控制器,从XIB中取出视图,然后将视图控制器连接到XIB说它应该连接到视图部分的位置

从技术上讲,当您使用导航控制器或选项卡栏时,会有嵌套的视图控制器,但您自己的视图控制器基本上会被调用,就好像它是顶层一样,因为这些容器知道它们将容纳其他视图控制器

至于大小调整-它不是像素大小调整,而是容器大小调整。视图控制器调整它连接到的主视图的大小,然后视图中任何元素的自动大小调整行为决定它们的大小调整方式-标签之类的一些东西可能会四处移动,但默认情况下不会收缩。如果单击IB中的标尺选项卡,您可以可以查看视图中任何对象的当前自动调整大小行为-两端带有箭头的中心线告诉您对象是否允许调整大小,以及在哪个方向。正方形外侧的线告诉您对象将“粘住”哪一侧到,这意味着无论容纳对象的容器如何调整大小,对象将与这些边保持相同的距离

我不确定IB最好的书是什么,但是你