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与多线程