2

我的项目窗口中有一个 NSView ,如下图所示:

如何将 NSImageViews 添加到此“自定义视图”的子视图中,使其显示在那里而不是直接显示在应用程序的主窗口中?

4

2 回答 2

1

以编程方式,您将访问要添加子视图的视图,然后在其上调用 -addSubView: 方法。您可以将其作为连接到界面构建器的 IBOutlet 来访问,也可以通过标识符访问它(在界面构建器检查器的“身份”部分中设置标识符字符串)。遍历窗口控制器视图的子视图(您的自定义视图将是一个)并测试“标识符”的字符串值

这是最近一个项目的简化代码片段,用于以编程方式将额外的“属性”框添加到已经在 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];
于 2012-09-04T15:38:50.720 回答
0

将 NSImageViews 拖放到 NSView 上,这会将 NSImageViews 作为接口生成器中的子视图添加到 NSView

于 2012-09-04T14:14:50.243 回答