gpt4 book ai didi

cocoa - 从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib

转载 作者:行者123 更新时间:2023-12-03 16:29:17 24 4
gpt4 key购买 nike

我在 Interface Builder 中有一个 View 设置,其中包含一个加载另一个 Nib 文件的 viewController。然而,由于某种原因,正在加载的 nib 文件中包含的对象永远不会被调用 awakeFromNib。我在这里缺少什么?无论如何,是否可以在界面生成器中从 Nib 加载 View ,并在界面生成器中管理它们的属性和大小?

enter image description here

一般来说,管理多个 Nib 并将它们组合成复杂 View 的最佳实践是什么?

最终解决方案:

我创建了一个像这样的 NSViewController 子类。

@interface NibLoadingViewController : NSViewController

// The placeholder would be replaced during run-time by the view
@property (weak, nonatomic) IBOutlet NSView *placeholder;

@end

@implementation NibLoadingViewController

@synthesize placeholder = _placeholder;

- (void)awakeFromNib {
if (self.placeholder)
self.view = self.view; // Trigger lazy loading
}

- (void)loadView {
[super loadView];
if (!self.view)
return;
// Replace the placehoder if it exists
if (self.placeholder) {
// Copy over relevant attributes
self.view.frame = self.placeholder.frame;
self.view.autoresizingMask = self.placeholder.autoresizingMask;
self.view.autoresizesSubviews = self.placeholder.autoresizesSubviews;
// Replaces the old view
[self.placeholder.superview replaceSubview:self.placeholder with:self.view];
self.placeholder = nil;
}
self.nextResponder = self.view.nextResponder;
self.view.nextResponder = self;
}

@end
这样,您只需将占位符 socket 挂接到包含 View Controller 的 Nib 中,它就会自动为您加载其他 Nib ,并复制占位符中的所有属性并将其替换到主 Nib 中。

最佳答案

nib 文件的内容是延迟加载的。如果您希望调用 -(void)awakeFromNib,则需要先从 nib 文件中访问某些内容。

NSViewController *controller = [[NSViewController alloc] initWithNibName:@"MyView" bundle:nil];

/*
* awakeFromNib was not called yet
*/

NSView *view = controller.view;

/*
* but now -(void)awakeFromNib was called.
*/

关于cocoa - 从 Cocoa 中的其他 nib(即 Interface Builder)加载 nib,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8639886/

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