我有一个包含文本字段的视图控制器(UICollectionView)。在此控制器中,我听UIKeyboardDidShowNotification
:s。像这样:
- (void)registerForKeyboardNotifications
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardDidShow:)
name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWillBeHidden:)
name:UIKeyboardWillHideNotification object:nil];
}
并在
viewWillAppear
中:- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self registerForKeyboardNotifications];
[...]
在另一个视图控制器中,我有一个
UITextView
。该控制器还监听UIKeyboardDidShowNotification
。在推送第二个视图控制器之前,我将第一个视图控制器作为观察者移除:- (void)viewWillDisappear:(BOOL)animated
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
但是,当键盘出现在
VC2
中时,keyboardDidShow
操作也会在VC1
中被调用,从而导致不必要的动画。是否有可能以某种方式避免这种行为?更新
奇怪的是,当我点击
VC1
中的后退按钮时,会调用VC2
中的通知动作。 最佳答案
在推送第二个视图控制器之前,我将第一个视图控制器作为观察者移除:
也许那不是正在发生的事情。实际上,在我看来,viewWillDisappear
在推送之前是不可能的。
我不确定,但是当您按下新的视图控制器并且键盘立即出现时,可能在其他视图消失之前就触发了通知。
您可以在启动推送时尝试移除观察者(例如prepareForSegue
中)。
关于ios - 在两个ViewController中调用的UIKeyboardDidShowNotification,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18422990/