UIKeyboardDidShowNotification

UIKeyboardDidShowNotification

我有一个包含文本字段的视图控制器(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/

10-14 21:41
查看更多