一个xib,几个子类

时间:2014-11-26 11:05:45

标签: ios objective-c xcode interface-builder xib

我有一个自定义UIView子类的xib文件。工作良好。我能够加载正确的nib并创建我的类的实例,它包含我添加到xib文件的所有子视图。

但是,我也已经将这个视图子类化了,但是我无法弄清楚如何创建这个类的实例并让它使用父类使用的xib文件。这甚至可能吗?我不想为我的子类创建一个新的xib文件,因为视图层次结构,子视图和GUI看起来是一样的,它只是代码不同。

我可以加载一个笔尖并将其“连接”到另一个类,而不是在xib设置中指定为“自定义类”的类吗?或者我可以创建一个新的视图实例并告诉它使用某个名称的xib吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试使用-awakeAfterUsingCoder:编写一些非常奇怪的东西来替换创建的对象,但这真的很不稳定,有些可以使它正确。

问题是.xib文件存储了一系列序列化对象,当加载这个集合时,关于每个对象的信息,即它的类,大小,其他属性,父对象,约束也被反序列化并应用。因此,xib文件存储哪个类应该接收+alloc和其他消息,因此,哪些对象将通过KVC(-setValue:forKey:)接收所有属性。所以,不,你不能只配置一些类来加载一些xib,因为xib文件告诉应该加载哪个类。

作为一个解构,我建议重构你的代码,(例如)将不同的子类逻辑封装到其他对象中。因此,在您拥有多个具有不同逻辑的子类之前,您将拥有可从xib加载的单个类,但您必须设置一些MyDifferentLogicVariant1Implamentor实体以保留不同的逻辑以适应不同的&#39 ;类。

Superclass - Subclass1 - Subclass2
vs
Superclass.differentLogic = DifferentLogicImplementor1
Superclass.differentLogic = DifferentLogicImplementor2