2012-04-10 76 views
0

在我的應用程序窗口中,我有兩個NSViews。在左邊的NSView(「菜單」)包含幾個按鈕。當其中一個按鈕被點擊時,它應該改變正確的NSView(「內容」)的內容。添加子視圖到NSView顯示,但不能刪除

對於右側的每個視圖,我有一個單獨的NSViewControllers,它們被加載並且它們的視圖被添加爲子視圖。當左側按下另一個按鈕時,應刪除右側添加的子視圖,並將新視圖作爲子視圖加載。

要做到這一點,我載入我的菜單中的AppDelegate有以下幾點:

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

這工作得很好。正如你所看到的,我在Menu VC中有一個指向contentView的NSView指針,這樣我就可以用子視圖填充它。

現在作爲按下按鈕的一種方法,我做到以下幾點:

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

這是行不通的。

但是,如果我從MenuViewController實現的awakeFromNib方法(在應用程序打開時的默認內容的情況下)添加一個子視圖,它的作品。但是,當我嘗試刪除該子視圖使用

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

我不能。有趣的是,如果我嘗試計算子視圖的數量(甚至在awakeFromNib方法中添加一個子視圖後),它會爲self.contentView返回0個子視圖。爲什麼?我怎樣才能使它正常工作?

感謝

+0

什麼是self.contentView?據我所知NSViewController沒有這樣的屬性,除非你自己創建它。 – Vervious 2012-04-10 04:59:05

+0

在AppDelegate中,它是一個指向右側NSView(我的應用程序的內容部分)的NSView指針。在MenuVC中,我還有一個NSView指針,它在創建時從AppDelegate填充,並傳遞AppDelegate的指針,以便我可以在主應用程序窗口中填充正確的NSView。也許這有助於https://lh5.googleusercontent.com/-rsaZ6LZLeqM/T4PCBu-z43I/AAAAAAAAAAo/wS9__tdNxmo/s798/Screen%2520Shot%25202012-04-10%2520at%252007.13.39.png – Joseph 2012-04-10 05:19:59

回答

1

消息傳遞self.contentView達到什麼除了事實上,對於一些事情,返回0,可能意味着self.contentView爲零。

你可能有兩個意外的MenuVC實例嗎?也許有一個在NIB中實例化,一個在代碼中實例化?

如有疑問,請記錄下所有內容。以各種方法記錄self。日誌menuSubView剛剛創建它。日誌menuSubView.contentView剛剛分配它。等等。最後,你可能會看到你正在與不同的對象進行交互,而不是你所認爲的。

+0

就是這樣...我仍然在MenuViewController的NIB中有一個NSObject ...謝謝! – Joseph 2012-04-10 06:18:15

相關問題