使用xib子类UICollectionViewController

时间:2015-11-25 16:10:50

标签: ios objective-c xib

我正在尝试创建自定义UICollectionViewController子类。

我是使用Xcode的向导创建的:

Screenshot 1

点击Finish后,我收到了这个.xib文件:

Screenshot 2

当我尝试从另一个类中调用它时:

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]];

它没有崩溃,但有一些问题:

  1. 如果CollectionViewLayout文件中已有.xib,为什么需要MyCollectionViewController
  2. 我不想在background-color: green之外创建布局;在这种情况下,子类化的目的是什么?
  3. 整个视图显示空白。

2 个答案:

答案 0 :(得分:1)

如果在xib中指定了视图控制器的UI,则必须通过调用[[MyCollectionViewController alloc] initWithNibName:@"MyCollectionViewController" inBundle:[NSBundle mainBundle]]来实例化它(或者你得到你的包)。当您使用此构造函数时,视图控制器的出口将正确连接,并根据xib中的内容设置布局。

答案 1 :(得分:0)

XIB 主要是老派,对于视图控制器更是如此。将它们用于视图,有时用于单元格。由于您要创建视图控制器,请改用故事板。这有一些优点:您可以在故事板中配置VC(及其视图);你可以使用自动布局;并且您可以将相关的视图控制器放在同一个故事板中。

打开storyboard文件后,拖出一个新的UIViewController(或本例中为UICollectionViewController),并在第三个属性选项卡(通常在右侧)上设置自定义类。