一个xib,几个子类

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

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

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

你可以尝试用-awakeAfterUsingCoder:写一些非常奇怪的东西-awakeAfterUsingCoder:替换创建的对象,但这真的很不稳定,有些人可以把它-awakeAfterUsingCoder:

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

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

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