下の図に示すように、プロジェクトのウィンドウ内に NSView があります。
この「カスタム ビュー」のサブビューに NSImageViews を追加して、アプリケーションのメイン ウィンドウに直接ではなく、そこに表示されるようにするにはどうすればよいですか?
下の図に示すように、プロジェクトのウィンドウ内に NSView があります。
この「カスタム ビュー」のサブビューに NSImageViews を追加して、アプリケーションのメイン ウィンドウに直接ではなく、そこに表示されるようにするにはどうすればよいですか?
サブビューを追加するビューにプログラムでアクセスし、そのビューで -addSubView: メソッドを呼び出します。インターフェイス ビルダーにフックされた IBOutlet としてアクセスするか、識別子 (インターフェイス ビルダー インスペクタの "identity" セクションに識別子文字列を設定) によってアクセスできます。windowcontroller のビュー (カスタム ビューは 1 つ) のサブビューを反復処理し、"identifier" の文字列値をテストします。
これは、xib で既にボックスが定義されているビューに追加の「プロパティ」ボックスをプログラムで追加するための、最近のプロジェクトからの単純化されたコード スニペットです。新しいボックス ビュー ( propertiesBoxView
) を既存のNSView
( IBOutlet-ed によって参照される) に追加し、_detailsView
別の兄弟ボックス (識別子を「UI_DETAILSBOX」に設定) に対して相対的に配置します。NSImageView は、ボックス ビューと同じように動作する必要があります。
_propsViewController = [[MySpecialViewController alloc] initWithThings:...];
/* snip */
NSView *propertiesBoxView = [_propsViewController view];
NSView *detailsBox = nil;
// find the details box
for (NSView *sibling in [_detailsView subviews]) {
if ([[sibling identifier] isEqualToString:@"UI_DETAILSBOX"]) {
detailsBox = sibling;
break;
}
}
if (detailsBox == nil) {
return;
}
[_detailsView addSubview:propertiesBoxView];
NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(propertiesBoxView, detailsBox);
NSArray *verticalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[detailsBox]-9-[propertiesBoxView]-(>=9)-|"
options:0
metrics:nil
views:viewsDictionary];
NSArray *horizontalConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-9-[propertiesBoxView]-(>=9)-|"
options:0
metrics:nil
views:viewsDictionary];
[_detailsView addConstraints:verticalConstraints];
[_detailsView addConstraints:horizontalConstraints];
NSImageViews を NSView にドラッグ アンド ドロップして、NSImageViews を Interface builder のサブビューとして NSView に追加します。