在哪里订阅/取消订阅UIKeyboardWill(显示|隐藏)通知?

时间:2011-04-25 10:06:15

标签: iphone keyboard notifications

假设我有一些视图控制器,每个视图控制器都有一些textview / textfields / webviews。有一个主视图控制器(MainViewController),其余的使用presentModalViewController:animated:显示。

编辑:我想澄清一下我没有使用UINavigationController - 主视图控制器只是一个普通的UIViewController,而其他的则不时显示为模态视图控制器。

我想知道如何实现键盘通知订阅,以便可以正确调整最顶层视图控制器中的子视图。我尝试了两种方法:

1 /订阅UIKeyboardWill(显示|隐藏)viewDidLoad中的通知,并取消订阅dealloc

问题:多个视图控制器同时收到通知,导致奇怪的布局调整大小。

2 /订阅viewWillAppear,订阅viewDidDisappear

问题:有时候viewWillAppear没有被触发,所以我必须手动重新订阅键盘通知。

欢迎任何建议。

2 个答案:

答案 0 :(得分:2)

我认为,在viewDillAppear中订阅并在viewDidDisappear中取消订阅更可取的是在viewDidLoad中订阅UIKeyboardWill(显示|隐藏)通知,并在dealloc中取消订阅。

正如您所提到的,方法2只有一个问题。

问题:有时未触发viewWillAppear,因此我必须手动重新订阅键盘通知。

以下是确保您的viewWillAppear 触发的代码。

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

答案 1 :(得分:1)

这是一个想法,使用UINavigationController类的visibleViewController属性。

在rootViewControllers viewDidLoad方法中实现通知, 并调用updateVisibleViewController之类的方法,通过调用visibleViewController

访问最可见的视图控制器
-(void)updateVisibleViewController{
   [[rootNavigationController visibleViewController] "trigger your method here"];
}