我在 Interface Builder 中有一个视图设置,其中包含一个加载另一个 Nib 文件的 viewController。但是,由于某种原因,正在加载的 nib 文件中包含的对象永远不会被调用awakeFromNib
。我在这里想念什么?无论如何在界面构建器中从 Nib 加载视图并在界面构建器中管理它们的属性和大小?
一般来说,管理多个 nib 并将它们组合成复杂视图的最佳实践是什么?
最终解决方案:
我像这样创建了一个 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
这样,您只需要在包含视图控制器的 nib 中挂钩占位符插座,它会自动为您加载其他 nib 并从占位符复制所有属性并将其替换到主 nib 中。