我有一个用于自定义 UIView 子类的 xib 文件。工作正常。我能够加载正确的 nib 并创建我的类的实例,它包含我添加到 xib 文件中的所有子视图。
但是,我也对该视图进行了子类化,但我不知道如何创建此类的实例并让它使用父类使用的 xib 文件。这可能吗?我不想为我的子类创建一个新的 xib 文件,因为视图层次结构、子视图和 GUI 看起来相同,只是代码不同。
我可以加载一个笔尖并将其“连接”到另一个类,而不是在 xib 设置中指定为“自定义类”的类吗?或者我可以创建视图的新实例并告诉它使用特定名称的 xib 吗?
你可以尝试写一些非常奇怪的东西-awakeAfterUsingCoder:
来替代创建的对象,但这确实很不稳定,只有少数人可以做对。
问题是 .xib 文件存储一组序列化对象,当加载该组时,有关每个对象的信息(即它的类、大小、其他属性、父对象、约束)也会被反序列化和应用。所以,xib 文件存储哪个类应该接收+alloc
和其他消息,以及哪些对象将通过 KVC 接收所有属性(-setValue:forKey:
)。所以,不,你不能只配置一些类来加载一些 xib,因为 xib 文件告诉应该加载哪个类。
作为解决方案,我建议重构您的代码,(例如)将不同的子类逻辑封装到其他对象中。因此,在您拥有具有不同逻辑的多个子类之前,您将拥有可从 xib 加载的单个类,但您必须设置一些MyDifferentLogicVariant1Implamentor
实体为“不同”类保留不同的逻辑。
Superclass - Subclass1 - Subclass2
vs
Superclass.differentLogic = DifferentLogicImplementor1
Superclass.differentLogic = DifferentLogicImplementor2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)