2011-04-25 28 views
0

比方說,我有視圖控制器屈指可數,各自有一些textviews /文本框/網頁視圖。有一個主視圖控制器(MainViewController),其餘的是使用presentModalViewController:animated:顯示。凡訂購/退訂到UIKeyboardWill(顯示|隱藏)通知?

編輯:我想澄清,我沒有使用UINavigationController - 主視圖控制器只是一個普通的UIViewController,其他人不時顯示爲模態視圖控制器。

我不知道我應該如何實現鍵盤的通知訂閱,這樣最頂部的視圖控制器內的子視圖能夠正確地調整大小。我試過兩種方法:

1 /訂閱UIKeyboardWill(顯示|隱藏)通知viewDidLoad,並取消訂閱dealloc

問題:多視圖控制器獲得在同一時間接到通知,導致怪異佈局調整大小。

2 /訂閱的viewWillAppear,認購在viewDidDisappear

問題:有時viewWillAppear不會被觸發,所以我就手動重新訂閱鍵盤的通知。

的任何建議都歡迎。

回答

2

我認爲,訂閱在viewWillAppear中和退訂viewDidDisappear更優選則訂閱UIKeyboardWill(顯示|隱藏)通知在viewDidLoad中,並在dealloc中退訂。

正如你提到的,只有一個問題與方法2

問題:有時viewWillAppear中不會被觸發,所以我就手動重新訂閱鍵盤的通知。

以下是確保您的viewWillAppear始終觸發的代碼。

http://www.idev101.com/code/User_Interface/UINavigationController/viewWillAppear.html

+0

有趣的提示 - 謝謝! – 2011-04-25 10:39:32

1

這裏有一個想法,使用的UINavigationController類的visibleViewController財產。

在rootViewControllers viewDidLoad方法實現通知, 並呼籲像updateVisibleViewController的方法,你用電話訪問您最明顯的視圖控制器visibleViewController

-(void)updateVisibleViewController{ 
    [[rootNavigationController visibleViewController] "trigger your method here"]; 
} 
+0

我不使用UINavigationController,所以這是沒有用的。這就是說,我從來沒有聽說過'visibleViewController'。謝謝! – 2011-04-25 10:37:09