gpt4 book ai didi

objective-c - 以编程方式加载 nib2 时,从 nib1 调用 awakeFromNib

转载 作者:行者123 更新时间:2023-12-03 18:01:28 24 4
gpt4 key购买 nike

当我使用以下语法从 nib1 加载 nib2 时,当前 nib (nib1) 中的 awakeFromNib 方法再次被调用。 (但不是 initWithFrame 方法)即使 nib2 已打开并正确获得焦点。我不希望再次执行 nib1 中的 awakeFromNib 。我错过了什么?

[NSBundle loadNibNamed:@"iQueryWindow" owner:self];

更多信息:iQueryWindow.xib 有一个与之关联的 NSView 的 iQueryView.h 和 iQueryView.m 子类,用于创建带有按钮、文本字段等的窗口 View 。事件顺序如下所示:我从 nib1 单击了一个按钮view,它的clicked事件只有上面一行代码来打开nib2的窗口。 Nib2 的窗口打开并进行所有初始化,包括其 (nib2) 自己的 inintWithFrame 和 awakeFromNib 方法。之后,我可以观察到 nib1 的窗口由于其自己的 awakeFromNib 被调用而发生变化(我也可以在 NSlog 语句的帮助下通过控制台观察到这一点)。 (nib2 的窗口显示在 nib1 的顶部。)nib2 上有一个按钮,可以使用以下按钮关闭 nib2:[self.window close]。

最佳答案

-awakeFromNib 被发送到 nib 文件中的所有对象,包括文件的所有者。如果您有一个从 nib 文件加载的对象,并使该对象成为另一个 nib 文件的所有者,它将收到 -awakeFromNib 两次。这是设计使然。

尽管您可以使用 ivar 来管理类在 Nib 唤醒方面的状态,但请考虑使用 NSViewController 的子类(或 NSWindowController;它实际上并不是清除 nib2 是否具有 View 或窗口作为其顶级对象之一)作为辅助 nib 文件的文件所有者。

关于objective-c - 以编程方式加载 nib2 时,从 nib1 调用 awakeFromNib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6050683/

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