假设我有一些视图控制器,每个视图控制器都有一些textview / textfields / webviews。有一个主视图控制器(MainViewController),其余的使用presentModalViewController:animated:
显示。
编辑:我想澄清一下我没有使用UINavigationController - 主视图控制器只是一个普通的UIViewController,而其他的则不时显示为模态视图控制器。
我想知道如何实现键盘通知订阅,以便可以正确调整最顶层视图控制器中的子视图。我尝试了两种方法:
1 /订阅UIKeyboardWill(显示|隐藏)viewDidLoad
中的通知,并取消订阅dealloc
。
问题:多个视图控制器同时收到通知,导致奇怪的布局调整大小。
2 /订阅viewWillAppear
,订阅viewDidDisappear
问题:有时候viewWillAppear
没有被触发,所以我必须手动重新订阅键盘通知。
欢迎任何建议。
答案 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"];
}