我熟悉为我自己的 UIView 子类创建 XIB 的大部分过程,但并非一切对我来说都正常工作 - 这主要与 IBOutlets 链接有关。我可以让他们以一种迂回的方式工作。
我的设置是这样的:
- 我有 MyClass.h 和 MyClass.m。他们有用于 UIView(称为视图)和 UILabel(称为 myLabel)的 IBOutlets。我添加了“视图”属性,因为网上的一些示例似乎表明您需要这个,它实际上解决了我因为找不到视图属性而崩溃的问题,我想即使在 UIView 父类中也没有.
- 我有一个名为 MyClass.xib 的 XIB 文件,它的 File's Owner 自定义类是 MyClass,在该类的 .h 和 .m 存在之后正确预填充。
我的 init 方法是我遇到问题的地方。
我尝试使用 NSBundle mainBundle 的“loadNibNamed”方法并将所有者设置为“self”,希望我会创建一个视图实例,并且它会自动使其插座与我班级中的插座相匹配(我知道如何做到这一点,我很小心)。然后我想我想让'self'等于那个笔尖中索引0处的子视图,而不是做
self = [super init];
或类似的东西。
我觉得我在这里做错了,但是在线示例在 init 方法中发生了类似的事情,但是他们将该子视图 0 分配给 view 属性并将其添加为子视图-但这不是总共两个 MyClass 实例?一个基本上与 IBOutlets 无关,包含通过 loadNibNamed 实例化的子 MyClass?或者充其量,它不是一个带有额外中间 UIView 的 MyClass 实例,其中包含我最初想要作为 MyClass 的直接子级的所有 IBOutlets?当涉及到像 instanceOfMyClass.frame.size.width 这样的事情时,这会带来一点烦恼,因为它返回 0,而当引入的子 UIView 返回我正在寻找的真实帧大小时。
我做错的事情是我在 init 方法中弄乱了 loadNibNamed 吗?我应该做更多这样的事情吗?
MyClass *instance = [[MyClass alloc] init];
[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:instance options:nil];
还是像这样?
MyClass *instance = [[[NSBundle mainBundle] loadNibNamed:@"MyClass" owner:nil options:nil] objectAtIndex:0];
提前感谢您的帮助。