Let say I have a storyboard that contains UINavigationController as initial view controller. Its root view controller is subclass of UITableViewController, which is BasicViewController. It has IBAction which is connected to right navigation button of the navigation bar

From there I would like to use the storyboard as a template for other views without having to create additional storyboards. Say these views will have exactly the same interface but with root view controller of class SpecificViewController1 and SpecificViewController2 which are subclasses of BasicViewController.
Those 2 view controllers would have the same functionality and interface except for the IBAction method.
It would be like the following:

@interface BasicViewController : UITableViewController

@interface SpecificViewController1 : BasicViewController

@interface SpecificViewController2 : BasicViewController

Can I do something like that?
Can I just instantiate the storyboard of BasicViewController but have root view controller to subclass SpecificViewController1 and SpecificViewController2?

Thanks.

推荐答案

这是个好问题,但不幸的是,这只是一个蹩脚的答案.我认为目前不可能按照您的建议执行,因为UIStoryboard中没有初始值设定项,允许在初始化时覆盖与序列图像板中的对象详细信息中定义的序列图像板关联的视图控制器.在初始化时,stoaryboard中的所有UI元素都链接到视图控制器中的属性.

默认情况下,它将使用情节提要定义中指定的视图控制器初始化.

如果您试图重用在故事板中创建的UI元素,它们仍然必须链接或关联到任何视图控制器正在使用它们的属性,以便能够"告诉"视图控制器有关事件的信息.

在故事板布局上复制并不是什么大不了的事,尤其是如果你只需要3个视图的类似设计,但是如果你这样做,你必须确保之前的所有关联都被清除,否则它在试图与之前的视图控制器通信时会崩溃.您将能够在日志(log)输出中将其识别为KVO错误消息.

你可以采取以下几种方法:

  • 将UI元素存储在UIView中——在一个xib文件中,并从基类中实例化它,然后将其作为子视图添加到主视图中,通常是self.看法然后,您可以简单地使用故事板布局,其中基本上是空白的视图控制器在故事板中保持其位置,但为其指定了正确的视图控制器子类.因为他们会从基地继承,所以他们会得到那种观点.

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

如果苹果能想出一种方法来实现你的提议,那就太好了,但是让图形元素与控制器子类预先链接仍然是个问题.

祝你新年快乐!!

Objective-c相关问答推荐

NSMutableDictionary 的深层可变副本

让 NSRunLoop 等待设置标志的最佳方法?

在 Objective C 中动态调用类方法

如何获取 NSArray 的最后一个对象

声明变量id和NSObject *有什么区别?

切换隐私设置将杀死应用程序

更改 UIBarButtonItem 的 Tint colored颜色

如何删除应用程序指定目录中的所有文件?

在 iOS 中创建带有 URL 的 UIImage

iOS:如何将 UIViewAnimationCurve 转换为 UIViewAnimationOptions?

在 Objective C 中使用 extern

反转 NSString 文本

iPhone:在 UITextField 上禁用 Auto-Cap/autocorrect 问题

在 32 位和 64 位架构上格式化 NS(U)Integer 时类型转换的替代方法?

从 iPhone 设备查找当前国家

@class 在 Objective-C 中做了什么?

如何从 UIColor 对象中获取红绿蓝 (RGB) 和 alpha?

当 UIView 框架更改时,视图内的 AVPlayer 层不会调整大小

iPhone UILabel 文字软阴影

BOOL到 NSString