键盘通知未在设备上触发
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 键盘通知不必要地触发