標籤:
// 以後自訂控制器建議寫這個方法,讓控制器一建立出來就擁有某些屬性
// init方法內部預設會調用initWithNibName方法
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
self.hidesBottomBarWhenPushed=YES; //當push到下一個頁面時隱藏底部導航條
}
return self;
}
1. ShowViewController的initWithNibName方法
ShowViewController* showMessage = [[ShowViewController alloc]
initWithNibName:@"ShowViewController" bundle:nil];
self.showViewController = showMessage;
2.VideoCellController的loadNibNamed方法
NSArray * nib = [[[NSBundle mainBundle]loadNibNamed:@"Save3ViewController"
owner:self options:nil] lastObject];
1.他們的聯絡:可以使用此方法載入使用者介面(xib檔案)到我們的代碼中,這樣,可以通過操作這個載入進來的(xib)對象,來操作xib檔案內容。
2.區別:
(1).initWithNibName要載入的xib的類為我們定義的視圖控制器類
loadNibNamed要載入的xib的類為NSOjbect。
(2).載入方式不同
initWithNibName方法:是消極式載入,這個View上的控制項是 nil 的,只有到 需要顯示時,才會不是 nil
loadNibNamed方法:即時載入,用該方法載入的xib對象中的各個元素都已經存在。
3.initWithNibName:nibNameOrNil得執行順序:
- supper :
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- set param=@“supper-A”
- NSLog(@“A-initNIb”);
- }
- viewDIdLoad
- {
- [super viewDidiLoad];
- NSLog(@“A-view”);
- NSLog(param);
- }
-
- sub:
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- set param=@“sub-B”
- NSLog(@“B-initNIb”);
- }
- viewDIdLoad
- {
- [super viewDidiLoad];
- NSLog(@“B-View”);
- NSLog(param);
- }
執行sub時輸出順序:
A-initNIb
A-view
supper-A
B-View
supper-A
B-initNIb
sub-initWithNibName: 裡調用supper的initWithNibName:
superclass的initWithNibName方法結束,表示nib檔案已載入,則調用sub的 viewDidLoad方法。於是應調用[subclass viewDidLoad]方法。
subclass的viewDidLoad方法又調用了supclass的viewDidLoad方法。
最後才是initWithNibName方法剩餘的代碼
結論,你在sub裡面設定的param=sub-B,並沒有起作用輸出,因為,在設定之前,sub的view已經執行過了。
iOS中initWithNibName 和 loadNibNamed 的區別和聯絡(參考孤獨的豆沙包)