3

我正在开发一个 Mac 应用程序。其中一个窗口可以加载同一个 NIB/XIB 文件中的多个 NSView 对象。

但我的代码如下所示:

@interface TheWindowController : NSWindowController {
    //Interface objects
    IBOutlet NSTableView    *detailsTree;
    IBOutlet NSView         *bigView;
    IBOutlet NSView         *subView1;
    IBOutlet NSView         *subView2;
    IBOutlet NSView         *subView3;
    IBOutlet NSView         *subView4;
    IBOutlet NSView         *subView5;
}

我的问题是是否可以将所有这些 IBOutlets 保存在一个数组、字典或类似的东西中。所以将来我可以在我的实现中做这样的事情:

- (IBAction)traceTableViewClick:(id)sender {
    //having now a NSArray called subviewsArray
    [[[bigView subviews] objectAtIndex:0] removeFromSuperview];
    [rightView addSubview: [subviewsArray objectAtIndex:[detailsTree selectedRow]]];
}

可能吗?如何?有什么例子吗?

4

2 回答 2

0

我使用自定义视图做了类似的事情,其中​​包含许多我想整体操作的控件。您需要在@interface声明中将它们分开,以便该IBOutlet 属性与 Interface Builder 一起正常工作,但在您的init方法中,您可以将它们组织成一个数组或您NSArray自己:

- (id)init
{
    self = [super init];
    if (self != nil)
    {
        _viewArray = [[NSArray alloc] initWithObjects:subView1, subView2,
                        subView3, subView4, subView5, nil];
    }
    return self;
}

- (void)dealloc
{
    [_viewArray release];
    ...etc...
    [super dealloc];
}

然后,您可以根据需要处理它们:

- (void)doThing
{
    for (id view in _viewArray)
    {
        [view doSomething];
    }
}
于 2012-04-13T13:07:41.167 回答
0

只需将您的 NSViews 添加到 NS(Mutable)Array 或 NS(Mutable)Dictionary,就像向它们添加任何其他对象一样。

于 2012-05-09T02:34:13.023 回答