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代碼
- int retVal = UIApplicationMain(argc, argv, nil, nil);
- int retVal = UIApplicationMain(argc, argv, nil, nil);
改為Java代碼
- int retVal = UIApplicationMain(argc, argv, nil, @"___PROJECTNAMEASIDENTIFIER___AppDelegate");
- int retVal = UIApplicationMain(argc, argv, nil, @"___PROJECTNAMEASIDENTIFIER___AppDelegate");
4.編輯___PROJECTNAMEASIDENTIFIER___AppDelegate.m
把方法 Java代碼
- - (void)applicationDidFinishLaunching:(UIApplication *)application {
- // Override point for customization after application launch
- [window makeKeyAndVisible];
- }
- - (void)applicationDidFinishLaunching:(UIApplication *)application {
- // Override point for customization after application launch
- [window makeKeyAndVisible];
- }
改為Java代碼
- - (void)applicationDidFinishLaunching:(UIApplication *)application {
- UIWindow *wd = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- self.window = wd;
- [wd release];
- [window makeKeyAndVisible];
- }
- - (void)applicationDidFinishLaunching:(UIApplication *)application {
- UIWindow *wd = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
- self.window = wd;
- [wd release];
- [window makeKeyAndVisible];
- }
當然,不改寫模板程序,使用window-based模板生成框架后,按照上述方法改寫程序也是可以的。
小結:iPhone開發中關于Nib文件講解的內容介紹完了,希望本文對你有所幫助!