iOS 9.0 - 获取键盘将显示/隐藏来自其他应用程序的通知

Posted

技术标签:

【中文标题】iOS 9.0 - 获取键盘将显示/隐藏来自其他应用程序的通知【英文标题】:iOS 9.0 - getting keyboard will show/hide notifications from other apps 【发布时间】:2015-11-12 09:04:52 【问题描述】:

我的视图控制器注册到键盘通知(keyboardWillShow、keyboardWillHide)。

我启动我的应用程序。它显示了注册到键盘通知的视图控制器。键盘不可见。

我切换到短信应用程序并开始编写文本。在我写作时,我的应用会收到通知。通知在屏幕顶部显示为横幅。

当我点击横幅时,我的应用会打开并立即收到键盘通知。

据我所知,这个键盘通知与短信的键盘有关。

如何识别键盘事件是否来自我的应用?

【问题讨论】:

一个问题,你为什么不使用 textfield/textview 代表来了解键盘通知?它们将是您的应用内编辑活动独有的。 在这里查看我的答案***.com/a/40031687/2774520 这能回答你的问题吗? keyboardWillShow gets called for other app's keyboards 【参考方案1】:

您可以在viewWillDisappear 中删除对观察者的监听(键盘通知),并可以在viewWillAppear 中重新开始监听观察者,这可能会解决问题

- (void)registerForKeyboardNotifications

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWasShown:)
                                                 name:UIKeyboardWillShowNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(keyboardWillBeHidden:)
                                                 name:UIKeyboardWillHideNotification object:nil];

    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(applicationWillEnterBackground:)
                                                 name:UIApplicationWillResignActiveNotification
                                               object:nil];


- (void)viewWillAppear:(BOOL)animated 
    [super viewWillDisappear:animated];
    [self registerForKeyboardNotifications];


- (void)deregisterForKeyboardNotifications 
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
   [center removeObserver:self name:UIKeyboardWillShowNotification object:nil];
   [center removeObserver:self name:UIKeyboardWillHideNotification object:nil];
   [center removeObserver:self name:UIApplicationWillResignActiveNotification object:nil];


- (void)viewWillDisappear:(BOOL)animated 
    [super viewWillDisappear:animated];
    [self deregisterForKeyboardNotifications];

【讨论】:

以上是关于iOS 9.0 - 获取键盘将显示/隐藏来自其他应用程序的通知的主要内容,如果未能解决你的问题,请参考以下文章

iOS之 利用通知(NSNotificationCenter)获取键盘的高度,以及显示和隐藏键盘时修改界面的注意事项

iOS:在 iPad 模式视图中获取键盘点的顶部?

输入焦点时隐藏ios设备上的键盘

iOS中监控软键盘显示或隐藏的可靠方法

UITextField - 当应用程序来自后台时键盘不隐藏

Android 9.0新特性