私もそれで行き詰まり、そのことをあきらめました-IBパレットからの白い縁取りのビューを持つ青い円。コードからコントローラーを作成し、ファイル所有者を介して所有するコントローラー クラスへの参照のみを IB に設定します。ファイル所有者を右クリックし、ID インスペクターにクラス名を入力してから、ファイルの所有者ビューから見る。
コードでは、適切な初期化ポイントで次のことを行います。
[self setMyViewController = [[MyViewController alloc] initWithNibName: @"MyView" bundle: [NSBundle mainBundle]]
特定のケースでwindowDidLoad
は、ウィンドウがペン先からロードされ、作業の準備ができているときに、これが実行中になる可能性があります。次に、そのビューを Windows コンテンツ ビューに追加できます。また、ビューとビュー コントローラーの間に 1:1 の関係を持たせることを検討することもできます。メンテナンスの面で、生活がずっと楽になります。
編集: @pcperini がコメントで示唆しているように、パレット コンポーネントを使用できますが、コードでコントローラーをインスタンス化する必要があります。パレット コンポーネントを使用する場合は、メイン コントローラーまたは AppDelegate でプロパティを作成します。
@property (...) MyViewController *myViewController;
実際にコントローラーを作成するコード行を追加します (上記を参照)。次に、バインディング インスペクターを使用して、パレット コンポーネントをmyViewController
プロパティにバインドします。
したがって、あなたが見逃しているのは、実際にはコントローラー オブジェクトをインスタンス化していないということです。
編集 2: コードは次のとおりです (awakeFromNib はトップ コントローラーのメソッドです)。それぞれが異なるサブビューを処理する 2 つの子コントローラーを作成します。
- (void) awakeFromNib {
[[self startEndTopicHeader] setHeader: @"Event timeline boundary"];
[[self startDateHeaderView] setHeader: @"Event (start) date"];
[[self endDateHeaderView] setHeader: @"Event end date"];
[self setStartDateViewController: [[EventTimeViewController alloc] initWithNibName: @"EventTimeView" bundle: [NSBundle mainBundle]]];
[[[self startDateViewController] view] setFrame: [[self dummyStartView] bounds]];
[[self dummyStartView] addSubview: [[self startDateViewController] view]];
[[self startDateViewController] setParentController: self];
[self setEndDateViewController: [[EventTimeViewController alloc] initWithNibName: @"EventTimeView" bundle: [NSBundle mainBundle]]];
[[[self endDateViewController] view] setFrame: [[self dummyEndView] bounds]];
[[self dummyEndView] addSubview: [[self endDateViewController] view]];
[[self endDateViewController] setParentController: self];
}