2009-11-11 104 views
3

我有一個根視圖控制器,它在其viewDidLoad方法的索引0處插入子視圖。爲什麼viewDidAppear沒有被觸發?

我想讓子視圖成爲firstResponder,但只能做到這一點 - 從我的理解 - 在子視圖的viewDidAppear方法。

這裏的代碼行我添加到根視圖控制器的viewDidLoad方法:

 [self.view insertSubview: subViewController.view atIndex: 0]; 

的subviewcontroller具有XIB,subViewController.xib,在運行時顯示正確。不過,subViewController的viewDidAppear不會被觸發。

任何想法爲什麼發生這種情況?任何想法如何彌補這一點 - 除了手動調用viewDidAppear(這樣做會導致失敗成爲firstResponder)?

感謝,

mbotta

回答

15

您必須將視圖控制器放到導航堆棧上,以便委託方法被調用。將視圖控制器的視圖添加到子視圖數組不會調用它們。你應該做的第一件事是閱讀View Controller Programming Guide from Apple,因爲這將以非標準的方式爲你解決一些頭疼的問題。

,而不是添加視圖到你的根視圖控制器子視圖,這樣做:

SubviewController *controller = [[SubviewController alloc] init]; 
[[self navigationController] pushViewController:controller animated:YES]; 
[controller release], controller = nil; 

現在你的委託方法將被調用。如果您沒有導航控制器作爲您的根視圖控制器,但是,這不起作用。

+0

謝謝!也就是說,事實上,我不打算在這個項目中使用導航控制器。我通讀了你提到的編程指南(謝謝)昨天,只是爲了確定,但我真的找不到任何東西來幫助我。 ...絕望。 – mbotta 2009-11-12 11:38:47

+0

我想我的觀點是,你所要做的並不是明智的,因爲你找不到解決方案。您可能有一個很好的主意,可以提供與標準不同的視圖,但是,通常情況下,您可以更輕鬆地堅持Apple提供的導航堆棧或選項卡觀點。也許如果你詳細說明你想要做什麼,那麼SO上的人可以提出一些適合你的要求的不同而又適當的方法。最好的祝福。 – 2009-11-12 15:17:53

+0

好點。事實上,正如我將在稍後回答我自己的問題時所指出的那樣,我選擇放棄這個更簡單的設計:實用程序模板,我相信它被稱爲(現在不在我的mac中)。 與該模板,沒有根視圖控制器打擾。有一個主要觀點是翻頁視圖的代表。兩者都得到適當的觸發,這是我設計的重點。 感謝您將這個錯誤放在我的頭上! – mbotta 2009-11-13 12:13:00

10

如果我沒有記錯(抱歉,找不到現在文檔的地方)-viewDidAppear不會被調用的子視圖。您必須在父視圖控制器的-viewDidAppear方法中手動調用它。

+0

真的嗎?哎呀,這是不幸的:我應該已經發現,在我自己的文檔中,當我調用viewDidAppear時,我自己並不知道如何成爲FirstResponder。不過謝謝,我會盡力找到參考。 – mbotta 2009-11-11 22:30:25

+2

謝謝,保存我的時間很多:) – Ansari 2011-03-16 12:31:10

相關問題