別のNibファイルをロードするviewControllerを含むInterfaceBuilderのビュー設定があります。ただし、何らかの理由で、ロードされているnibファイルに含まれているオブジェクトが呼び出されることはありませんawakeFromNib
。ここで何が欠けていますか?インターフェイスビルダーで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
このように、View Controllerを含むペン先にプレースホルダーアウトレットをフックするだけで、他のペン先が自動的に読み込まれ、プレースホルダーからすべての属性がコピーされ、メインのペン先に置き換えられます。