ios - 一个xib,几个子类

标签 ios objective-c xcode interface-builder xib

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

但是,我也对这个 View 进行了子类化,但我想不出如何创建此类的实例并让它使用父类使用的 xib 文件。这可能吗?我不想为我的子类创建一个新的 xib 文件,因为 View 层次结构、 subview 和 GUI 看起来相同,只是代码不同。

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

最佳答案

您可以尝试使用 -awakeAfterUsingCoder: 编写一些非常奇怪的东西来替换创建的对象,但这真的很不稳定,只有少数人能做到。

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

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

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

关于ios - 一个xib,几个子类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27147513/

相关文章:

ios - NSMutableArray 属性在函数被激发后变为 null

iphone - 如何在 iPhone 的回调中从邮件编辑器获取收件人、发件人、抄送和密件抄送字段?

objective-c - macOS 深色模式和 NSAboutPanelOptionCredits

ios - Xcode Storyboard约束和自动布局

ios - 从 Xcode 构建更快的 "release"?

iphone - 如何使用 UITapGestureRecognizer 同时检测点击和双击?

ios - 搜索栏 - 导航栏中的取消按钮

ios - 当应用程序进入后台时,iOS 显示的图像在纵向模式下显示倒置

ios - 模型类中的 ASIHTTPRequest 异步请求

iphone - 我收到错误:使用“NSArray”类型的表达式初始化“NSMutableArray *”的指针类型不兼容?