gpt4 book ai didi

iphone - 从 nib 加载自定义 UIView,nib 中包含的所有 subview 都是零?

转载 作者:IT王子 更新时间:2023-10-29 07:47:26 26 4
gpt4 key购买 nike

我有一个自定义的 UIView 对象,它带有一个定义 View / subview 布局的 nib。我的 socket 已连接,当我从 initWithFrame: 初始化对象时,一切都井井有条。

我遇到的问题是当我使用 IB 将 UIView 嵌入另一个 Nib 时;自定义 UIView 出现,但它包含的所有 subview 都没有出现——实际上它们的符号都解析为 nil。我有一个非常小的 initWithCoder:awakeFromNib: 实现(只是做日志记录),我的理解是,当 nib 被反序列化时, subview 至少应该在这个过程中被初始化?

我自己得出的唯一结论是发生了以下两种情况之一:要么我的 socket 引用已损坏/损坏并且无法正常工作,要么我对从 nib 加载过程的理解有误并且我错过了一些东西。

提前致谢!

编辑:(按要求为 Nekto 发布的代码...如您所见,它会记录日志,仅此而已,呵呵。)

- (id)initWithCoder:(NSCoder *)aDecoder {
if ((self = [super initWithCoder:aDecoder])) {
NSLog(@"ThumbnailGridView.initWithCoder frame= %f, %f", self.frame.size.width, self.frame.size.height);
}
return self;
}

- (void)awakeFromNib
{
NSLog(@"ThumbnailGridView:awakeFromNib");
}

编辑 2:Nibs、 Controller 、 subview 等

Nibs:我有一个包含 UIView 的 nib。此 UIView 包含单个 UIScrollView,其中填充了在另一个 nib 中定义的 UIView 网格。 (注意:这部分工作正常,因为填充是通过编程完成的,并且与 initWithFrame: 调用一起工作。)这里的问题是 UIScrollView 符号在 initWithCoder: 和 awakeFromNib: 都被调用后为 nil,所以对象只是被添加到零,什么也没有发生。如果 ScrollView 符号不为零,我相信这会起作用。

Controller :有两个 Controller 使用它,一个是用 initWithFrame: 完成的并且工作完美,另一个将它嵌入为基于 nib 的引用。 (正如此处其他地方提到的,在 IB 中定义一个 UIView,设置自定义类。)我单步执行了代码,并且该 View - 正在 - 被正确初始化 - 只有它的 subview “丢失”。

这是否有助于更清楚地了解情况?

最佳答案

您可能误解了 nib 加载的工作原理。如果您定义一个自定义 UIView 并创建一个 nib 文件来布置其 subview ,您不能只将一个 UIView 添加到另一个 nib 文件,将 IB 中的类名更改为您的自定义类并期望 nib 加载系统弄清楚。您需要修改自定义 UIView 类的 initWithCoder 以编程方式加载定义其 subview 布局的 Nib 。例如:

- (id)initWithCoder:(NSCoder *)aDecoder {
if (self = [super initWithCoder:aDecoder]) {
[[NSBundle mainBundle] loadNibNamed:@"CustomView" owner:self options:nil];
[self addSubview:self.toplevelSubView];
}
return self;
}

您的自定义 View 的 nib 文件需要将“文件的所有者”类设置为您的自定义 View 类,并且您需要在您的自定义类中有一个名为“toplevelSubView”的导出连接到您的自定义 View nib 文件中的 View 作为所有 subview 的容器。向您的 View 类添加额外的 socket 并将 subview 连接到“文件的所有者”(您的自定义 UIView)。

或者,只需以编程方式创建您的自定义 View 并绕过 IB。

关于iphone - 从 nib 加载自定义 UIView,nib 中包含的所有 subview 都是零?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7588066/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com