objective-c - 如何为多个子类使用单个 Storyboard uiviewcontroller

标签 objective-c cocoa-touch ios5 uiviewcontroller storyboard

假设我有一个包含 UINavigationController 作为初始 View Controller 的 Storyboard。它的 Root View Controller 是UITableViewController 的子类,即BasicViewController。它有 IBAction 连接到导航栏的右侧导航按钮

从那里我想使用 Storyboard作为其他 View 的模板,而不必创建额外的 Storyboard。假设这些 View 将具有完全相同的界面,但具有类 SpecificViewController1SpecificViewController2 的 Root View Controller ,它们是 BasicViewController 的子类。
除了 IBAction 方法之外,这 2 个 View Controller 将具有相同的功能和界面。
如下所示:

@interface BasicViewController : UITableViewController

@interface SpecificViewController1 : BasicViewController

@interface SpecificViewController2 : BasicViewController

我可以这样做吗?
我可以只实例化 BasicViewController 的 Storyboard ,但有 Root View Controller 来子类 SpecificViewController1SpecificViewController2

谢谢。

最佳答案

很好的问题 - 但不幸的是只是一个蹩脚的答案。我不相信目前可以按照您的建议进行操作,因为 UIStoryboard 中没有初始化程序允许覆盖与 Storyboard 相关联的 View Controller ,如初始化 Storyboard 中的对象详细信息中定义的那样。在初始化时, Storyboard中的所有 UI 元素都链接到它们在 View Controller 中的属性。

默认情况下,它将使用 Storyboard 定义中指定的 View Controller 进行初始化。

如果您试图重用您在 Storyboard 中创建的 UI 元素,它们仍然必须链接或关联到 View Controller 使用它们的属性,以便它们能够“告诉” View Controller 有关事件.

复制 Storyboard布局并不是什么大问题,特别是如果您只需要为 3 个 View 进行类似设计,但是如果您这样做,则必须确保清除所有以前的关联,否则会崩溃当它尝试与前一个 View Controller 通信时。您将能够在日志输出中将它们识别为 KVO 错误消息。

您可以采取的几种方法:

  • 将 UI 元素存储在 UIView 中 - 在 xib 文件中,并从您的基类中对其进行实例化,并将其作为 subview 添加到主视图中,通常是 self.view。然后,您只需使用 Storyboard 布局,基本上空白的 View Controller 在 Storyboard 中保持其位置,但为其分配了正确的 View Controller 子类。由于他们将从基础继承,他们将获得该 View 。

  • 在代码中创建布局并从基本 View Controller 安装它。显然,这种方法违背了使用 Storyboard 的目的,但在您的情况下可能是要走的路。如果您的应用程序的其他部分可以从 Storyboard 方法中受益,则可以在适当的情况下在这里和那里偏离。在这种情况下,就像上面一样,您只需使用分配了子类的银行 View Controller ,然后让基本 View Controller 安装 UI。

如果 Apple 想出一种方法来执行您的建议,那就太好了,但是将图形元素与 Controller 子类预链接的问题仍然是一个问题。

新年快乐!! 好好的

关于objective-c - 如何为多个子类使用单个 Storyboard uiviewcontroller,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14111572/

相关文章:

cocoa-touch - 当我拖动项目之间的空白区域时,为什么我的 UICollectionView 不滚动?

iphone - 如何在 UINavigationBar 上获取 'matte' 颜色?

iphone - Xcode 4.2 (雪豹) 和 iOS 5.1

ios - 尝试删除 NSUserdefault 数组中的 TableView 行

iphone - 隐藏第二个 View Controller 并导航到第三个 View Controller

ios - 我可以限制iOS上NSOperation/线程的CPU使用率吗? [复制]

objective-c - 如何在 iOS 中创建一个 json 文件?

objective-c - Live Face Recognition iOS添加3D对象

ios - 将 CLLocationpoints 保存到 Parse 然后检索它们的最佳方法

ios - 如何在iCloud中对UIDocument进行增量写入?