iPhone開發中關於Nib檔案講解

來源:互聯網
上載者:User

 

iPhone開發中關於Nib檔案講解

   

  iPhone開發中關於Nib檔案講解是本文要介紹的內容,不多說,來看詳細內容 。一個簡單的iPhone項目及代碼,不用Interface Builder開發iPhone程式,一個細微的差別 loadNibNamed:owner:options:

  用過delphi的童鞋應該比較清楚frm檔案,就是用滑鼠拖拖拉拉,就能設計好的那個表單所產生的檔案 。

  在使用xcode進行開發時,也用了同樣的形式,把複雜的頁面通過簡單的拖拉以及屬性設定來設計出來,然後序列化到Nib檔案裡,等程式啟動並執行時候,載入進來就可以了 。

  在xcode進行表單開發時,有兩種形式把Nib檔案還原序列化 。

  一種是通過設定view controller的NIB File屬性 。

  另外一種便是通過initWithNibName方法 。

  第二種其實沒什麼好說的,就是讀取nib檔案,載入,還原序列化,產生執行個體,顯示 。

  對於第一種,有些地方做的有些蹊蹺,百思不得其解 。

  假設要為主表單Window添加一個View,xcode中現有View-based模板的做法是,先建立一個帶Nib檔案(假設為MyViewController.xib)的UIViewController自訂子類(假設為MyViewController.m) 。

  然後把MainWindow.xib中的View Controller執行個體的class name設為這個自訂子類MyViewController,並指定NIB File為剛才建立的Nib檔案(MyViewController.xib) 。

  但是經過測試,其實只要設定了class,不指定NIB File也是可以的 。

  當然如果在delegate裡使用viewController的超類UIViewController來定義property的話(這樣做的目的是能把MainWindow.xib中的View Controller的插頭,插到delegate裡的插座上),也可以只指定NIB File來實現載入 。

  但是如果把class name和NIB File設成各自不關聯的類和nib檔案會怎樣呢?

  答案是以NIB File為主 。

  比如說,我們設定delegate的property為UIViewController 。

  但是可以指定MainWindow.xib中View Controller的class為MyViewController1(其對應Nib檔案為MyViewController1.xib)

  但是我們設定這個View Controller的NIB File為MyViewController2.xib(其File Owner為MyViewController2.m),那麼實際載入進來的是MyViewController2.xib裡的View 。

  在設計MainWindow.xib中View Controller的時候,除了載入其他的Nib檔案外,也可以直接設計其View,也就是說不需要另外的nib檔案,直接在MainWindow.xib進行設計 。當兩者同時進行的時候,以MainWindow.xib中設計的表單為主,也就是說即使load了其他Nib檔案,也不會呈現出來 。

  對於有潔癖,或者有重度自我強迫症的人來說,是不需要這種快餐式的設計的 。

  那就是拋棄一切Nib檔案,所有的表單設計都在代碼中完成 。

  改造Window-Based模板,

  1.從project中刪除MainWindow.xib檔案

  2.從Info.plist中,刪除Main nib file base name項

  3.編輯main.m

  把這句Java代碼

1 int retVal = UIApplicationMain(argc, argv, nil, nil); 

2 int retVal = UIApplicationMain(argc, argv, nil, nil); 

  改為Java代碼

3 int retVal = UIApplicationMain(argc, argv, nil, @"___PROJECTNAMEASIDENTIFIER___AppDelegate"); 

5 int retVal = UIApplicationMain(argc, argv, nil, @"___PROJECTNAMEASIDENTIFIER___AppDelegate"); 

  4.編輯___PROJECTNAMEASIDENTIFIER___AppDelegate.m

  把方法 Java代碼

6 - (void)applicationDidFinishLaunching:(UIApplication *)application { 

8 // Override point for customization after application launch 

9 [window makeKeyAndVisible]; 

10 } 

11 

12 - (void)applicationDidFinishLaunching:(UIApplication *)application { 

13 

14 // Override point for customization after application launch 

15 [window makeKeyAndVisible]; 

16 } 

  改為Java代碼

17 - (void)applicationDidFinishLaunching:(UIApplication *)application { 

18 UIWindow *wd = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

19 self.window = wd; 

20 [wd release]; 

21 [window makeKeyAndVisible]; 

22 

23 } 

24 

25 - (void)applicationDidFinishLaunching:(UIApplication *)application { 

26 UIWindow *wd = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

27 self.window = wd; 

28 [wd release]; 

29 [window makeKeyAndVisible]; 

30 

31 } 

  當然,不改寫模板程式,使用window-based模板產生架構後,按照上述方法改寫程式也是可以的

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.