關於Cocoa的窗口創建調用-一個nib包含兩個窗口

轉自http://blog.csdn.net/dongdongdongjl/article/details/7732774

       近期在研究cocoa的窗口關係,發現之前寫過的一片文章在描述一個nib文件包含兩個或者兩個以上的窗口時如何實現的文章,寫的不清楚,並且很多概念上存在模糊的地方,通過近段時間的調測和學習,對於這部分可以說理解又深刻了一些,因此,在這裏從新補充和完善一些概念。

1、關於nib當中的窗口,對象的理解。

對於nib來說,你可以簡單的理解爲rc,但是這一點還不夠,其實nib是可以包含對象的,這句話的理解就是說,當一個nib文件被加載時,那麼nib文件當中所描述的窗口資源,對象資源都會被加載到內存當中,但是用不用是取決於開發人員的事情,因此,爲了節省內存空間。Cocoa官方的推薦方法是一個窗口對應一個nib,不會佔用過多的內存。

2、在nib當中的窗口,包含了NSWindow,NSPanel對象等等,他們對應的類,其實就是後臺的類,那麼這個類描述,其實只是一個資源類的描述,主要描述大小,標題,位置等等。而實際背後控制的類,叫做NSWindowController類,所以,在cocoa當中處處都存在MVC的設計思想。而且關鍵一點是隻有NSWindowsController類纔有showWindows的方法,並不是NSWindows本身去顯示自己的。

3、一個nib窗口如何解決兩個NSWindow對象的顯示問題?

具體方法:

step1、在nib的file owner類,提供兩個NSWindow的outlet,讓nswindows變成對象。

step2、使用nNSWdindowController控制你需要顯示的窗口即可。方法如下:

NSWindowController * controller  = [NSWindowController alloc] initWithWindow :mywindow];

[controller showWindow:nil];

 

4、通常來講,多窗口的應用是使用多個nib文件的架構進行設計的,那麼具體設計方法如何哪?

說明:其實對於多個nib文件來說,有一個概念非常的重要,就是說一個nib是不能夠自動被加載的,他必須有一個能夠加載他的對象,而這個能夠加載他的對象,其實就是nib文件當中FILE'S OWNER對象,這個對象在nib來看是一個虛擬對象,也稱之爲佔位對象。但是對於外部來看,其實這個對象就是所謂的加載對象。還有一點就是說,加載對象,可以只完成加載的任務,也可以完成其他的功能,比如說IBAction,或者IBOutlet的功能等等。還有就是要補充一點,一旦nib被加載,nib當中所包含的所有對象都會被創建,並且可以使用。只是這個過程被cocoa隱藏在了後臺,所以程序的開發過程中,看不到有這樣的對象存在而已。


加載第二個nib文件的方法有很多,這裏簡單介紹三種。

第一個,

NSWindowController *controll=[[NSWindowController alloc] initWithWindows:mywindow];


第二個,

NSWindowController *controll = [[ NSWindowController alloc] initWithWindowNibName:@"nibname"]

第三個,

[NSBundle LoadNibNamed:@"nibname" owner : self];

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章