別のNibファイルをロードするviewControllerを含むInterface Builderでビュー設定をしています。しかし何らかの理由で、ロードされているnibファイルに含まれるオブジェクトは、決してawakeFromNib
と呼ばれることはありません。私はここで何が欠けていますか?とにかくインタフェースビルダーのNibからビューをロードし、そのプロパティとインタフェースビルダのサイズを管理することはありますか?一般的にココアの他のnib(Interface Builder)からペン先をロード
、複数のニブを管理し、複雑なビューにそれらを構成するためのベストプラクティスは何ですか?
最終解決:
私はこのような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
この方法では、あなただけのビューコントローラが含まれているペン先のプレースホルダのコンセントをフックする必要があり、それが自動的にあなたのための他のニブをロードして、プレースホルダからすべての属性をコピーし、メインでそれを置き換えますペン先。
私は、とにかくインタフェースビルダーのみを使用してロードされたペン先ディスプレイを作成することはありますか? – Tony
私の知る限りではありません。私のアプローチは次のようになります:私はメインウィンドウのペン先とすべての複雑なビューのペン先を作成します。メインウィンドウのコントローラーは、** - (id)initWithNibName:(NSString *)nibName **を呼び出してビューのコントローラー(たとえばawakeFromNib)をロードし、** window.contentView = viewController.view * *または** [window.contentView addSubView:viewController.view] **。 – Yevgeniy