NSNotification keyBoardWillShow 和 keyboardWillHide 没有被调用

Posted

技术标签:

【中文标题】NSNotification keyBoardWillShow 和 keyboardWillHide 没有被调用【英文标题】:NSNotification keyBoardWillShow and keyboardWillHide are not called 【发布时间】:2017-02-03 17:29:05 【问题描述】:

我有一个带有自定义视图的 xib 文件,上面有许多文本字段子视图。我已将每个文本字段上的委托设置为文件所有者,并成功地能够使用 texfield 委托方法。但不幸的是,键盘通知方法keyboardWillShow:和keyboardWillHide:根本没有被调用。

我在 textfieldShouldBeginEditing 添加了观察者,并在 textFieldDidEndEditing 移除了观察者。

这是我的代码的 sn-p:

添加观察者

-(void) textFieldShouldBeginEditing : (UITextField *) textField
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil];

移除观察者

-(void) textFieldDidEndEditing : (UITextField *) textField
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];

//通知方法

- (void)keyboardWillShow:(NSNotification *)notification

NSLog(@"Here");


- (void)keyboardWillHide:(NSNotification *)notification

NSLog(@"There");

//这些keyboardwillShow和keyboardWillHide中的任何一个都不会被调用。

如果有人能帮我找出我的代码问题或我可能遗漏的任何潜在问题,那就太好了。

【问题讨论】:

有可能在textFieldDidBeginEditing: 被调用之前键盘显示,导致keyboardWillShow 永远不会被调用。早点开始观察,看看是否有任何改变 【参考方案1】:

当您通过编辑 textView 显示键盘时,您正在添加观察者。它不会调用,因为键盘已经显示。您应该在 viewWillAppear 上添加观察者并删除 viewWillDisappear 方法。

【讨论】:

我在keyboardShouldBeginEditing上添加了观察者。抱歉,我说的是didBeginEditing。此外,它只是一个 xib 文件,viewcontroller 根据 xib 名称实例化其他视图,相同的 xib 可能不会在其父 viewcontroller 中实例化 viewWillAppear之前添加。 我只有 awakeFromNib 方法 是的,它会做的。但最好将此观察者添加到您在这两个生命周期方法上使用 xib 的 viewController 中。 我将尝试在 awakeFromNib 中实现它,并让您知道它是否有效。谢谢

以上是关于NSNotification keyBoardWillShow 和 keyboardWillHide 没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

Delegate/Block/NSNotification与多线程

iOS 项目中的NSNotification简单使用

NSNotification/绑定?

ios8调用 - (void) onKeyboardShow:(NSNotification *)通知两次

iOS 通知(NSNotification)

键入“NSNotification.Name?”没有成员“firInstanceIDTokenRefresh”