Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c Cocoa中的NSView数组?_Objective C_Macos_Cocoa_Osx Snow Leopard - Fatal编程技术网

Objective c Cocoa中的NSView数组?

Objective c Cocoa中的NSView数组?,objective-c,macos,cocoa,osx-snow-leopard,Objective C,Macos,Cocoa,Osx Snow Leopard,我正在开发一个Mac应用程序。其中一个窗口可以加载同一NIB/XIB文件中的多个NSView对象 但我的代码如下所示: @interface TheWindowController : NSWindowController { //Interface objects IBOutlet NSTableView *detailsTree; IBOutlet NSView *bigView; IBOutlet NSView *sub

我正在开发一个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]]];
}

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

我对一个自定义视图做了类似的操作,该视图包含许多我想要整体操作的控件。您需要在
@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];
    }
}

只需将您的NSView添加到NS(可变)数组或NS(可变)字典中,就像添加任何其他对象一样。

是否可用
IBOutletCollection
(我只是iOS,所以不确定)<代码>iOutletCollection(NSView)NSArray*视图。然后在interface builder中,将它们连接到集合,而不是单个插座
IBOutletCollection
在Cocoa的interface builder上似乎不起作用,链接部分中没有显示。不过在iOS中非常有用。