键盘通知未在设备上触发

Posted

技术标签:

【中文标题】键盘通知未在设备上触发【英文标题】:Keyboard notifications not firing on device 【发布时间】:2012-12-03 01:20:29 【问题描述】:

在模拟器上运行时没有问题,但通知没有发布在设备上(iPad 3 和 Mini 都运行 ios 6)。如果我自己发布通知,则会调用处理程序。我想知道你们中是否有人遇到过这个问题并有什么想法。

这是设置处理程序的代码:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(iPadEditSetTitleHandleKeyboardDidShowNotification:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(iPadEditSetTitleHandleKeyboardWillShowNotification:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(iPadEditSetTitleHandleKeyboardWillHideNotification:) name:UIKeyboardWillHideNotification object:nil];

以及处理程序本身的定义:

- (void)iPadEditSetTitleHandleKeyboardWillHideNotification:(NSNotification *)notification
- (void)iPadEditSetTitleHandleKeyboardWillShowNotification:(NSNotification *)notification
- (void)iPadEditSetTitleHandleKeyboardDidShowNotification:(NSNotification *)notification

感谢任何帮助。

更新:

开始了一个新项目,以解决所有问题,这里就是视图控制器。

//
//  DWViewController.m
//  KeyboatdTest
//
//  Created by Dan Wesnor on 12/3/12.
//  Copyright (c) 2012 Dan Wesnor. All rights reserved.
//

#import "DWViewController.h"

@interface DWViewController ()

@end

@implementation DWViewController


- (void)handleKeyboardNotification:(NSNotification *)notification

    NSLog(@"%@", notification.name);




- (void)viewDidLoad

    [super viewDidLoad];

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




- (void)didReceiveMemoryWarning

    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.




@end

情节提要包含一个文本字段。其他一切都是标准的单视图应用模板。

仍然没有喜悦。在模拟器中可以正常工作,但不能在 iPad 本身上工作。可能与配置有关还是与代码本身无关?

【问题讨论】:

它在任何设备上都不起作用还是在您拥有的所有设备上都不起作用? 刚刚检查过,它在 iPhone 上运行良好。只是无法在我所有的 iPad 上触发。 您可以将自己设置为 nil 的观察者,这将为您提供所有观察结果。您可以使用它来检查通知是否正在触发。 [[NSNotificationCenter defaultCenter] addObserver:self 选择器:@selector(someselector:) name:nil object:nil];然后只需记录通知名称。 你在哪里添加了这段代码? 您是否正在做一些事情,其中​​有一个或两个视图控制器处理 ipad 上另一个视图控制器的子视图?我认为除了添加你的处理程序和定义之外还有更多。需要更多关于 iPad 视图控制器与 iPhone 不同的详细信息 【参考方案1】:

这是一个很好的无证行为。

拆分键盘时不会触发这 3 个通知。但是,似乎在它们通常会触发之前附加 UITextField.inputAccessoryView ,即使键盘被拆分,它们也会触发。所以在收到 UIKeyboardWillChangeFrameNotification 后附加附件视图,其他三个将正常触发。

【讨论】:

以上是关于键盘通知未在设备上触发的主要内容,如果未能解决你的问题,请参考以下文章

在 phonegap 中打开软键盘时,未在 ios 7 上触发 showkeyboard/hidekeyboard 事件

在 iOS8.3 上显示警报视图时,iOS 键盘通知不必要地触发

显示软键盘时,Android 设备上的按钮单击事件未触发。

Android 8.1(API 27) - 重启后键盘未在Kiosk模式应用中显示

本地通知未在 Android 10 中触发

Kivy Textinput 未在 Windows 上检测到物理键盘