0

我的導航控制器出現問題。如果我視圖控制器添加到堆棧:viewDidDisappear未在UINavigationController上調用

- (void) tui_ToggleListStudy:(id)sender 
{ 
    listVC = [[ListViewController alloc] init]; 
    [self.navigationController pushViewController:listVC animated:NO]; 
    [listVC release]; 
} 

我的NSLog消息視圖控制器的下方,兩個viewWillDisappear:viewDidDisappear - 但只有viewWillDisappear:獲取調用。

不僅如此,但視圖控制器不接受任何其他委託或者消息:沒有viewDidUnload,或dealloc ...

有什麼我可以做這件事?

我很難過!有什麼想法嗎?

謝謝!

回答

3

如果您在代碼中對您的問題進行了相同的拼寫錯誤,那麼我知道答案:方法簽名爲viewDidDisappear:animated參數),而不是viewDidDisappear

不僅如此,但視圖控制器不接受任何其他委託或者消息:沒有viewDidUnload,或dealloc中......

當你把另一個控制器視圖控制器將不會被收回到堆棧上。除非內存不足,否則不會調用viewDidUnload

+1

謝謝!奇怪的是,我使用自動完成和XCode不會給你viewDidDisappear:,它只給你viewDidDisappear!我自然認爲這是正確的,因爲如果有GOING爲動畫而不是動畫,你更可能想知道「will」而不是「did」。仍然,現在排序謝謝! – jowie 2010-11-15 16:49:32

0

UIViewController的指定初始化程序是-initWithNibName:bundle:。你確定你的視圖控制器正在找到它的筆尖並找到它的連接視圖嗎?我敢打賭,如果你在初始化你的ListViewController後設置了一個斷點,你會發現它的-view返回nil。

+0

我用來做這樣的說法,但根據斯坦福大學的講座,如果您不申報,它會自動找到具有相同名稱的nob文件。無論如何,我做了你的建議,而且這個觀點不是零。 – jowie 2010-11-15 16:44:29

1

您必須在執行viewWillDisappear時調用super。

+0

這不是viewWillDisappear問題在哪裏,它的viewDidDisappear。即使我沒有叫超級,它仍然會跟蹤,因爲它位於鏈條的頂端... – jowie 2010-11-15 16:42:03

+0

@Prcela,謝謝。如果在viewWillDisappear中未調用[super viewWillDisappear:animated],則不會調用viewDidDisappear。 – situee 2012-11-27 08:13:29

2

假設你的導航控制器包含在某種頂視圖控制器,還必須從頂視圖控制器轉發相關消息,導航控制器:

-(void)viewWillAppear:(BOOL)animated 
{ 
    [navController viewWillAppear:animated]; 
} 

-(void)viewDidAppear:(BOOL)animated 
{ 
    [navController viewDidAppear:animated]; 
} 

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [navController viewWillDisappear:animated]; 
} 

-(void)viewDidDisappear:(BOOL)animated 
{ 
    [navController viewDidDisappear:animated]; 
} 
相關問題