カスタム ビュー クラスを持つ ViewController が 1 つあります。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];
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 の通知メソッドからビューのメソッドを呼び出します。
問題:
- UITextField をタップすると、キーボードが表示され、適切にアニメーションが行われます
- ただし、キーボードが表示された後、ユーザーがナビゲーションバーから戻るボタンを押すと、ViewController が画面から消えた後、キーボードは削除されません。
- 現在、ユーザーはキーボードを閉じることができません
通知コードを削除すると、完全に機能しました。
iOS 7.0 より前では、通知コードで完全に機能します。しかし、iOS 7.0 では機能しません。
各通知メソッドで NSLog を印刷しました。IOS 7.0 では、keyboardWillShow メソッドが最後に実行され、再びキーボードが表示されます。しかし、iOS 6.0 では、keyboardWillShow はついに実行されません。
UITextFieldDelegate メソッドも実装しています。
前もって感謝します