UIActionSheetが消えるときにキーボード表示/非表示通知が来る
公開日:
:
最終更新日:2014/03/13
Tips Notification, UIActionSheet, UIKeyboardWillHideNotification, UIKeyboardWillShowNotification, UITextField, UITextView, ソフトウェアキーボード
UITextViewやUITextField編集中にアクションシートを表示すると、アクションシートが閉じた時にキーボードの非表示/表示通知(UIKeyboardWillHideNotification/UIKeyboardWillShowNotification)が1回ずつ呼び出されるという事象に悩まされていました。
困ったときは大抵stackoverflowに同じことで困ってる人がいるだろう、と思って検索したら案の定あったので、簡単に日本語でご紹介したいと思います。
(stackoverflowでは、iOS7以降で発生する問題だそうですが、自分はiOS7以降環境でしかチェックしていないので本当にiOS6以前で怒らないのかどうかは未確認)
困る理由は、なくてもいい通知が2回走る(最終的にはキーボードは表示されたままで、別にキーボードの開閉アニメーションがあるわけでもない)というものです。
UITextFieldとかだとよく使われるであろう「キーボード表示時に、Viewの位置を変更する(キーボードに隠れないようにする)」という処理がアクションシートを閉じるときに発生してしまうのは、見栄えの関係でアニメーションを入れてたり、補助機能ボタンを表示したり消したりしてると、せっかく見栄えをよくしたのが残念なことになります。
stackoverflowで提示されてた解決策はこんなコードでした。ViewController.mの頭あたりに、UIActionSheetのカテゴリ拡張をローカルで実装し、自信がFirstResponderにならない(フォーカスを奪わない)ようにすればよいようです。
@interface UIActionSheet (NonFirstResponder) @end @implementation UIActionSheet (NonFirstResponder) - (BOOL)canBecomeFirstResponder { return NO; } @end
極めて簡潔ですが、これに自力で気がつくのはなかなかむずかしそうです。
回答者に感謝。
参照元:stackoverflow
http://stackoverflow.com/questions/20068184/keyboard-hide-and-show-again-right-after-uiactionsheet-dismiss-in-ios-7-sdk-7
関連記事
-
-
メソッドの呼び出し元を調べる
特定のメソッドに関して、そのメソッドをコールしているメソッド群を調べるための手順。 (1)調べたい
-
-
UITableViewのヘッダに小文字を入れる
UITableViewのセクションヘッダをStoryboardでカスタマイズするという話題を以前掲載
-
-
iPad用storyboard⇔iPhone用Storyboardへの変換
iPad用アプリとしてiPad用前提のstoryboardから、iPhone対応にするにあたり、si
-
-
iPadのUIModalPresentationFormSheetでキーボードが閉じない
iPadでUIModalPresentationFormSheet(全画面ではなく、中央にフロートし
-
-
UIActionSheetの文字がブレて多重表示される
UIActionsheetを使っていて、iOS7/iPadの組み合わせで起こる不具合らしき挙動が起こ
-
-
UISplitViewControllerの仕切り線の色を設定
UISplitViewControllerで、iPadを横向き(Landscape)にしたときの2つ
-
-
”No Scheme”になってしまった場合の対応
知人がXcodeで突然「No Scheme」表示になってRunするターゲットとデバイスが選択できない
-
-
GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法
情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初のシート)をCSVとしてエクス
-
-
iOS7でカメラ撮影時のステータスバーを消す
UIImagePickerControllerをカメラモードで表示するとステータスバーがカメラの一番
-
-
bitbucketをXcode5で使用する
bitbucketは無償で5人までの少人数チーム用のクローズド(非公開)リポジトリを作成できるため、