我正在处理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]]];
}
有可能吗?怎么样?有什么例子吗?
答案 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中,就像添加任何其他对象一样。