2012-04-10 5 views
0

In meinem Anwendungsfenster habe ich zwei NSViews. Auf der linken Seite enthält das NSView ("Menu") ein paar Buttons. Wenn auf eine der Schaltflächen geklickt wird, sollte der Inhalt der rechten NSView ("Inhalt") geändert werden.Hinzufügen von Unteransichten zu NSView wird angezeigt, kann aber nicht entfernt werden

Für jede der Ansichten auf der rechten Seite habe ich eine separate NSViewControllers, die geladen werden und ihre Ansichten wird als Unteransicht hinzugefügt. Wenn ein weiterer Knopf auf der linken Seite gedrückt wird, sollten die hinzugefügten Unteransichten auf der rechten Seite entfernt werden und die neue Ansicht sollte als Unteransicht geladen werden.

Um dies zu erreichen ich mein Menü in AppDelegate mit folgendem laden:

MenuVC *menuSubView = [[MenuVC alloc] initWithNibName:@"MenuVC" bundle: nil]; 
    menuSubView.contentView = (NSView*)[self contentView]; 
    [[self menuView] addSubview:[menuSubView view]]; 

Dies funktioniert gut. Wie Sie sehen können, habe ich einen NSView-Zeiger in der Menü-VC, der auf contentView zeigt, so dass ich ihn mit den Subviews füllen kann.

nun als Methode für eine der Tastendrücke ich folgendes tun:

SomeContentVC *subView = [[SomeContentVC alloc] initWithNibName:@"SomeContentVC" bundle:nil]; 
    [self.contentView addSubview:[subView view]]; 

Das funktioniert nicht.

Wenn ich jedoch eine Unteransicht von der wakeFromNib-Methode der MenuViewController-Implementierung (im Falle von Standardinhalt beim Öffnen der App) hinzufügt, funktioniert es. Wenn ich jedoch versuche, diese Unteransicht mit

[[self.contentView setSubviews:[NSArray array]]; 

zu entfernen, kann ich nicht. Interessant ist auch, dass wenn ich versuche, die Anzahl der Subviews zu zählen (selbst nachdem ich einen in der Methode watchFromNib hinzugefügt habe), gibt es 0 Subviews für self.contentView. Warum? Wie kann ich es richtig funktionieren lassen?

Dank

+0

Was ist self.contentView? Soweit ich weiß, hat NSViewController keine solche Eigenschaft, es sei denn, Sie erstellen sie selbst. – Vervious

+0

In der AppDelegate ist es ein NSView-Zeiger, der auf die rechte NSView (den Inhaltsteil meiner Anwendung) zeigt. In der MenuVC habe ich auch einen NSView-Zeiger, der von der AppDelegate beim Erstellen gefüllt wird und ich AppDelegate-Zeiger übergeben, so dass ich die richtige NSView im Hauptanwendungsfenster auffüllen kann. Vielleicht hilft das https://lh5.googleusercontent.com/-rsaZ6LZLeqM/T4PCBu-z43I/AAAAAAAAAAo/wS9__tdNxmo/s798/Screen%2520Shot%25202012-04-10%2520at%252007.13.39.png – Joseph

Antwort

1

Die Tatsache, dass self.contentView außer nichts Messaging erreicht, für einige Dinge, 0 bedeutet wahrscheinlich, dass zurückkehr self.contentView Null ist.

Haben Sie versehentlich zwei Instanzen von MenuVC? Vielleicht wurde einer in einer NIB instanziiert und einer in Code instanziiert?

Im Zweifelsfall alles protokollieren. Protokollieren Sie self in verschiedenen Methoden. Loggen Sie menuSubView kurz nachdem Sie es erstellt haben. Loggen Sie menuSubView.contentView kurz nachdem Sie es zugewiesen haben. Etc. Schließlich wirst du wahrscheinlich sehen, dass du mit anderen Objekten interagierst, als du dachtest.

+0

Das war es ... Ich hatte immer noch ein NSObject in der NIB des MenuViewController ... DANKE! – Joseph