2012-04-13 3 views
3

Ich arbeite an einer Mac-Anwendung. Eines der Fenster kann mehrere NSView-Objekte laden, die sich in derselben NIB/XIB-Datei befinden.Array von NSViews in Kakao?

Aber mein Code sieht wie folgt aus:

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

Meine Frage ist, ob das möglich ist, alle diese IBOutlets innerhalb eines Arrays zu halten, Wörterbuch oder etwas ähnlich. So könnte ich in Zukunft in meiner Implementierung so etwas tun:

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

Ist es möglich? Wie? Irgendwelche Beispiele?

+2

Ist 'IBOutletCollection' verfügbar (Ich bin nur so sicher iOS). 'IBOutletCollection (NSView) NSArray * Ansichten;'. Dann in Interface Builder verbinden sie mit der Sammlung anstelle von einzelnen Steckdosen –

+0

'IBOutletCollection' scheint nicht auf Cocoa's Interface Builder zu funktionieren, es wird nicht im Abschnitt Links angezeigt. Super nützlich in iOS obwohl. – Can

Antwort

0

Ich habe etwas Ähnliches mit einer benutzerdefinierten Ansicht getan, die viele Steuerelemente enthält, die ich massenhaft bearbeiten möchte. Sie müssen sie in der @interface Erklärung getrennt zu halten, so dass die IBOutletEigenschaft korrekt mit Interface Builder arbeitet, aber in Ihrer init Methode Sie sie in ein Array organisieren oder NSArray selbst:

- (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]; 
} 

Sie können dann arbeiten auf ihnen, wie Sie wünschen:

- (void)doThing 
{ 
    for (id view in _viewArray) 
    { 
     [view doSomething]; 
    } 
} 
0

einfach Ihre NSViews zu einem NS (Mutable) Array oder einem NS (Mutable) Wörterbuch die gleiche Art und Weise hinzufügen würden Sie ein anderes Objekt, um sie hinzuzufügen.