【问题标题】:Using one storyboard definition for two view controllers为两个视图控制器使用一个故事板定义
【发布时间】:2013-07-20 04:29:50
【问题描述】:

是否可以将一个视图控制器的故事板设置与两个视图控制器一起使用?

情况:我在情节提要中创建了一个视图控制器的视图。这个允许用户添加一个新的数据条目。让我们称之为MyNewEntryViewController。这工作正常。现在我需要一种方法来编辑我的数据条目。为此,我只想将我的第一个视图控制器子类化并在需要的地方调整它。让我们称之为MyEditEntryViewController

我会在我的故事板上使用instantiateViewController… 加载MyNewEntryViewController

MyNewEntryViewController *newEntryViewController = [storyboard instantiateViewControllerWithIdentifier:@"NewEntryViewController"];

效果很好。

如果我现在想实例化我的新视图控制器怎么办?尝试显而易见的

MyEditEntryViewController *editEntryViewController = [storyboard instantiateViewControllerWithIdentifier:@"NewEntryViewController"];

导致MyNewEntryViewController 存储在我的变量中,因为那是我在情节提要中定义的内容。

那么,使用我的故事板定义并能够使用两个不同的视图控制器的最佳方式是什么?你们是怎么做到的?

谢谢!
-f

【问题讨论】:

标签: objective-c cocoa-touch uiviewcontroller storyboard subclass


【解决方案1】:

不,这是不可能的。使用普通的旧 xib 可以做到这一点。然后,您可以在 initWithNibNamed:bundle: 视图控制器时指定 nib 的名称。

但是,我认为值得退后一步。这样做真的是个好主意吗?子类化视图控制器可能会变得混乱。视图控制器旨在成为自包含的功能单元,这与子类化不一致。除非视图控制器专门设计为子类化,否则我会避免这样做。我建议你合并两个视图控制器并覆盖setEditing:animated:

【讨论】:

  • 我认为子类化可能是一种很好的方式来实现我们在超类中需要的所有逻辑,然后只调整我们需要编辑的位。这不会有太大的变化。阅读您的答案后,我再次考虑了一下,并使原始视图控制器更加通用,以支持添加和编辑。感谢您的提示!
  • 我不同意您的说法“视图控制器旨在成为独立的功能单元”。 View Controller 的结构在所有地方都被子类化了。 UITableViewController 不是 UIViewController 的子类吗?此外,在 iTunes U 上的 CS193P 课程中,教师专门创建了一个 UITableViewController 的子类,其中包括一个 Fetched Results Controller,并告诉学生将其子类化为他们的作业。
  • @DataJock 你读过我的全部答案了吗?下一句说“除非视图控制器专门设计为子类化,否则我会避免这样做。” UITableViewController 专门设计用于子类化 - 事实上,除非它被子类化,否则它几乎没有用处。
  • @Benedict Cohen 我确实阅读了整个答案,但它的编写方式意味着它必须以 Apple 的方式设计,并且您不应该将它们设计为自己的子类。这显然不是你想要的声音,我只是不同意这部分陈述。对不起,如果听起来我不同意你所说的一切。
  • 只是说继承你自己的 viewController 子类是向它们添加功能的好方法,不应该避免 IMO。这里的主要问题是故事板的限制,而且特别烦人。
猜你喜欢
  • 2013-02-01
  • 2018-12-12
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 2017-12-15
  • 2015-02-11
  • 1970-01-01
  • 2013-01-28
相关资源
最近更新 更多