Cocoa中的NSView数组?

时间:2012-04-13 11:17:11

标签: objective-c macos cocoa osx-snow-leopard

我正在处理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;
}

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

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

有可能吗?怎么样?有什么例子吗?

2 个答案:

答案 0 :(得分: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];
    }
}

答案 1 :(得分:0)

只需将NSView添加到NS(Mutable)数组或NS(Mutable)Dictionary中,就像添加任何其他对象一样。