【问题标题】:How to programmatically subclass a UIViewController stored in a Storyboard?如何以编程方式对存储在 Storyboard 中的 UIViewController 进行子类化?
【发布时间】:2012-09-30 18:25:37
【问题描述】:

我正在开发我的第一个 iPad 应用程序,并且是第一次使用 Storyboards。

我的 Storyboard 中有 UITableViewController,它为自定义单元格使用“动态原型”。

我想做的是以编程方式实例化我的 UITableViewController 子类,但从 Storyboard 加载超级视图控制器。

这是因为我有一个 UI,但有多个子类用于每个不同实例所需的特定功能。

使用 .xib 文件很容易做到这一点,我会编写以下代码:

MyViewControllerSubClassA *viewControllerA = [[MyViewControllerSubClassA alloc] initWithNibName:@"generalViewControllerNib" bundle:nil];

MyViewControllerSubClassB *viewControllerB = [[MyViewControllerSubClassB alloc] initWithNibName:@"generalViewControllerNib" bundle:nil];

我知道我可以在单击视图控制器时在 Storyboard 编辑器中分配一个子类,但我想在实例化时以编程方式设置子类。

故事板似乎无法做到这一点,因为它们是自动实例化的。

这使得 Storyboard 的整个概念看起来有缺陷,而且不是很 OO。

如果我将视图控制器从 Storyboard 中移出并移到 .xib 文件中,我将无法使用动态和静态原型单元格,因为只有在使用 Storyboard 时才支持这些单元格。此外,Apple 的文档基本上说从现在开始使用 Storybaords。

【问题讨论】:

  • 完全一样的问题...你明白了吗?
  • 不,我只需要将 tableviewcontroller 多次添加到情节提要中,每次都有一个单独的类。
  • 我终于意识到我不需要任何 IB,所以我只是将我的 VC 子类化并用简单的 init 方法初始化它们......
  • 我想我发现的限制是,如果你想使用静态表格视图单元格,你只能从 IB 中进行。
  • 同样的问题,我想知道我们是否可以使用 initWithCoder...

标签: xcode ios5 uiviewcontroller storyboard uistoryboardsegue


【解决方案1】:

我会尝试这样的:

MyViewControllerSubclassA *controllerA = (MyViewControllerSubclassA *)[self.storyboard instantiateViewControllerWithIdentifier:@"myGenericVC"];

【讨论】:

  • 虽然这会将 UIViewController 转换为 MyViewControllerSubclassA 它实际上不会是 MyViewControllerSubclassA 的子类吗?
  • 我不认为它会,但这是你可以做你想做的最接近的事情。故事板并不是真正设计用来做你想做的事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-12
  • 2018-04-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多