我正在学习Interface Builder,我看到这样的代码(这里self
指的是ViewController):
[self presentViewController:anotherViewController animated:YES completion:nil];
我还注意到,当我创建UIViewController
的子类时,Xcode也提供了创建关联xib文件的选项。
所以我假设这个控制器知道它的相关视图是什么(initWithNibName:
)。我还假设视图知道它与哪个控制器关联,因为它显示为文件的所有者。
这是我的问题:
根据我的理解,UIView
及其相关的控制器总是在一起。现在我正在尝试以编程方式创建分页滚动视图(水平滚动),其中每个页面都是自定义的集合视图。所以我可以很好地创建视图。但我需要在每个集合视图中进行一些自定义控件。但是,我无法访问集合视图的控制器,因为我从未在我的代码中创建它们。
如何创建自定义视图并拥有它的视图控制器?谢谢!
答案 0 :(得分:1)
UIView
并非始终与UIViewController
相关联。
UIViewController
始终(或应该)与UIView
相关联,但单个视图控制器并不总是必须与同一视图关联。
实际上,UIViewController
具有view
属性,表示它们正在控制的视图,并且此视图不是只读的 - 它可以在运行时更改。
如果您要在情节提要板上创建视图控制器,或创建包含关联的.xib
文件的视图控制器,则可以为已拖放到的任何元素创建插座视图控制器。这可以通过打开助理编辑器,或双击配套文件在新窗口中打开它,然后按Ctrl +从UI元素拖动到类的@interface
部分(在{ {1}}或.h
文件,但在几乎所有情况下.m
都是最合适的。)
此外,当我们谈论.m
,UITableView
,UICollectionView
以及其他具有委托和/或数据源属性的UI元素时,这些也可能会被挂钩通过界面构建器启动。
除此之外,如果您在界面构建器唯一标记中提供UI元素,则可以使用视图控制器视图上的UITextField
方法获取对它们的引用。这将为您提供与为参数发送的标记匹配的视图的引用。
最后,如果您没有在界面构建中创建元素并希望从代码中完全创建它,那么您可能需要一个好的教程。它的要点是这个...实例化并设置视图。该视图准备就绪后,使用viewWithTag:
方法将其添加到视图控制器的视图中。
在一天结束时,无论您采用何种方法挂钩观看,您的addSubview:
部分都需要@property
,以便您可以维护对视图的引用。使用collectionviews / tableviews,设置其委托/数据源属性也很重要。