使用 xib 子类化 UICollectionViewController
Subclass UICollectionViewController with xib
我正在尝试创建自定义 UICollectionViewController
子class。
我使用 Xcode 的向导创建了它:
点击 Finish
后,我得到了这个 .xib
文件:
当我尝试像这样从另一个 class 调用它时:
MyCollectionViewController *myCollectionViewController = [MyCollectionViewController new];
[self addChildViewController:myCollectionViewController];
[self.view addSubview:myCollectionViewController.view];
我收到这个错误:
UICollectionView must be initialized with a non-nil layout parameter
如果我使用:
MyCollectionViewController *myCollectionViewController = [[MyCollectionViewController alloc] initWithCollectionViewLayout:[UICollectionViewFlowLayout new]];
它没有崩溃,但有一些问题:
- 如果
.xib
文件中已经存在,为什么还需要 CollectionViewLayout
?
- 我不想在
MyCollectionViewController
之外创建布局;在这种情况下,subclassing 的目的是什么?
- 整个视图显示为空白。
如果在 xib 中指定了视图控制器的 UI,那么您必须通过调用 [[MyCollectionViewController alloc] initWithNibName:@"MyCollectionViewController" inBundle:[NSBundle mainBundle]]
来实例化它(或者您得到您的包)。当您使用此构造函数时,视图控制器的插座会正确连接,并且布局会根据 xib 中的内容进行设置。
XIB 大部分 是老式的,对于视图控制器来说更是如此。将它们用于视图,或有时用于单元格。由于您正在创建视图控制器,因此请改用故事板。这有一些优点:您可以在故事板中配置 VC(及其视图);您可以使用自动布局;并且你可以将相关的视图控制器放在同一个故事板中。
打开故事板文件,拖出一个新的 UIViewController(在本例中为 UICollectionViewController),然后在第三个属性选项卡(通常在右侧)上,设置您的自定义 class.
我正在尝试创建自定义 UICollectionViewController
子class。
我使用 Xcode 的向导创建了它:
点击 Finish
后,我得到了这个 .xib
文件:
当我尝试像这样从另一个 class 调用它时:
MyCollectionViewController *myCollectionViewController = [MyCollectionViewController new];
[self addChildViewController:myCollectionViewController];
[self.view addSubview:myCollectionViewController.view];
我收到这个错误:
UICollectionView must be initialized with a non-nil layout parameter
如果我使用:
MyCollectionViewController *myCollectionViewController = [[MyCollectionViewController alloc] initWithCollectionViewLayout:[UICollectionViewFlowLayout new]];
它没有崩溃,但有一些问题:
- 如果
.xib
文件中已经存在,为什么还需要CollectionViewLayout
? - 我不想在
MyCollectionViewController
之外创建布局;在这种情况下,subclassing 的目的是什么? - 整个视图显示为空白。
如果在 xib 中指定了视图控制器的 UI,那么您必须通过调用 [[MyCollectionViewController alloc] initWithNibName:@"MyCollectionViewController" inBundle:[NSBundle mainBundle]]
来实例化它(或者您得到您的包)。当您使用此构造函数时,视图控制器的插座会正确连接,并且布局会根据 xib 中的内容进行设置。
XIB 大部分 是老式的,对于视图控制器来说更是如此。将它们用于视图,或有时用于单元格。由于您正在创建视图控制器,因此请改用故事板。这有一些优点:您可以在故事板中配置 VC(及其视图);您可以使用自动布局;并且你可以将相关的视图控制器放在同一个故事板中。
打开故事板文件,拖出一个新的 UIViewController(在本例中为 UICollectionViewController),然后在第三个属性选项卡(通常在右侧)上,设置您的自定义 class.