【问题标题】:Subclass UICollectionViewController with xib使用 xib 子类化 UICollectionViewController
【发布时间】:2015-11-25 16:10:50
【问题描述】:

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

我使用 Xcode 的向导创建了它:

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

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

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 文件中,为什么还需要它?
  2. 我不想在MyCollectionViewController 之外创建布局;在这种情况下,子类化的目的是什么?
  3. 整个视图显示为空白。

【问题讨论】:

    标签: ios objective-c xib


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      XIB大部分都是老式的,对于视图控制器来说更是如此。将它们用于视图,或者有时用于单元格。由于您正在创建视图控制器,因此请改用情节提要。这有一些优点:您可以在情节提要中配置 VC(及其视图);您可以使用自动布局;并且您可以将相关的视图控制器放在同一个故事板中。

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

      【讨论】:

      • 我知道,但我不能轻易切换到情节提要。另外,整个项目应该有一个故事板吗?
      • 不,绝对不是每个项目一个。它们变得太难以维护、太笨重、太难以合并更改。我将一个用于相关的 VC,例如具有“最近帐户”的帐户登录 VC。一个项目中有几个。
      • 另外,您不必将批发切换到情节提要,您可以保留现有的 XIB。
      猜你喜欢
      • 2015-02-04
      • 2015-12-26
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      • 1970-01-01
      • 1970-01-01
      • 2021-09-23
      • 2013-06-11
      相关资源
      最近更新 更多