我有一个带有自定义视图类的 ViewController。我已经通过添加到 viewWillAppear 方法并在 viewDidDisappear 中删除通知来处理键盘通知。
添加到 viewWillAppear 中的通知:
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector (keyboardWillShow:)
name: UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector (keyboardWillHide)
name: UIKeyboardWillHideNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector (keyboardDidHide)
name: UIKeyboardDidHideNotification object:nil];
将 Notification 移除到 viewDidDisappear 中:
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillShowNotification object: nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardWillHideNotification object: nil];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIKeyboardDidHideNotification object: nil];
并从 viewController 的通知方法中调用 view 的方法。
问题:
- 点击 UITextField 后,键盘出现并正确完成动画
- 但是在键盘出现后,如果用户从导航栏中按下后退按钮,那么在 ViewController 从屏幕上消失后,键盘将不会被移除。
- 现在用户无法关闭键盘
如果我删除通知代码,那么效果很好。
在 iOS 7.0 之前,它可以完美地与通知代码配合使用。但在 iOS 7.0 中,它不起作用。
我在每个通知方法中都打印了 NSLog,在 IOS 7.0 中,keyboardWillShow 方法最后执行并再次出现键盘。但是在 iOS 6.0 中,keyboardWillShow 最终没有执行。
我还实现了 UITextFieldDelegate 方法。
提前致谢