【问题标题】:Array of NSViews in Cocoa?可可中的 NSView 数组?
【发布时间】:2012-04-25 18:11:25
【问题描述】:

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

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

【问题讨论】:

  • IBOutletCollection 是否可用(我只有 iOS,所以不确定)。 IBOutletCollection(NSView) NSArray *views;。然后在界面生成器中将它们连接到集合而不是单个插座
  • IBOutletCollection 似乎不适用于 Cocoa 的界面构建器,它没有显示在链接部分。不过在 iOS 中超级有用。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我使用自定义视图做了类似的事情,该视图包含许多我想要整体操作的控件。您需要在 @interface 声明中将它们分开,以便 IBOutlet property 与 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];
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多