2012-04-13 6 views
3

私はMacアプリケーションで作業しています。ウィンドウの1つでは、同じNIB/XIBファイルにある複数のNSViewオブジェクトをロードできます。CocoaでのNSViewの配列?

しかし、私のコードは次のようになります。それは、配列、辞書または同様なものの内側に、これらすべてのIBOutletsを保持することが可能である場合

@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; 
} 

私の質問です。ですから、私の実装では、将来このようなことをすることができます:

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

可能でしょうか?どうやって?どんな例?

+2

「IBOutletCollection」は利用可能です(私はiOSだけがわかりません)。 'IBOutletCollection(NSView)NSArray * views;'次にインタフェースビルダーで個々のアウトレットではなくコレクションに接続します –

+0

'IBOutletCollection'はCocoaのインターフェースビルダーで動作しないようですが、リンクセクションには表示されません。 iOSで超便利。 – Can

答えて

0

私は大量に操作したい多くのコントロールを含むカスタムビューと同様のことをしました。あなたは、Interface Builderので正しく動作IBOutletプロパティよう@interface宣言に分け、それらを維持する必要がありますが、あなたの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]; 
    } 
} 
0

ただ、NS(変更可能な)配列またはNS(変更可能な)辞書にあなたがそれらに他のオブジェクトを追加するのと同じ方法で、あなたのNSViewsを追加します。

関連する問題