以编程方式将子视图添加到UIView - ios中

时间:2014-06-04 00:43:13

标签: ios objective-c uiview

我正在学习Interface Builder,我看到这样的代码(这里self指的是ViewController):

[self presentViewController:anotherViewController animated:YES completion:nil];

我还注意到,当我创建UIViewController的子类时,Xcode也提供了创建关联xib文件的选项。

所以我假设这个控制器知道它的相关视图是什么(initWithNibName:)。我还假设视图知道它与哪个控制器关联,因为它显示为文件的所有者。

这是我的问题:

根据我的理解,UIView及其相关的控制器总是在一起。现在我正在尝试以编程方式创建分页滚动视图(水平滚动),其中每个页面都是自定义的集合视图。所以我可以很好地创建视图。但我需要在每个集合视图中进行一些自定义控件。但是,我无法访问集合视图的控制器,因为我从未在我的代码中创建它们。

如何创建自定义视图并拥有它的视图控制器?谢谢!

1 个答案:

答案 0 :(得分:1)

UIView并非始终与UIViewController相关联。

UIViewController始终(或应该)与UIView相关联,但单个视图控制器并不总是必须与同一视图关联。

实际上,UIViewController具有view属性,表示它们正在控制的视图,并且此视图不是只读的 - 它可以在运行时更改。

如果您要在情节提要板上创建视图控制器,或创建包含关联的.xib文件的视图控制器,则可以为已拖放到的任何元素创建插座视图控制器。这可以通过打开助理编辑器,或双击配套文件在新窗口中打开它,然后按Ctrl +从UI元素拖动到类的@interface部分(在{ {1}}或.h文件,但在几乎所有情况下.m都是最合适的。)

此外,当我们谈论.mUITableViewUICollectionView以及其他具有委托和/或数据源属性的UI元素时,这些也可能会被挂钩通过界面构建​​器启动。


除此之外,如果您在界面构建器唯一标记中提供UI元素,则可以使用视图控制器视图上的UITextField方法获取对它们的引用。这将为您提供与为参数发送的标记匹配的视图的引用。


最后,如果您没有在界面构建中创建元素并希望从代码中完全创建它,那么您可能需要一个好的教程。它的要点是这个...实例化并设置视图。该视图准备就绪后,使用viewWithTag:方法将其添加到视图控制器的视图中。


在一天结束时,无论您采用何种方法挂钩观看,您的addSubview:部分都需要@property,以便您可以维护对视图的引用。使用collectionviews / tableviews,设置其委托/数据源属性也很重要。