*

UIActionSheetが消えるときにキーボード表示/非表示通知が来る

 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

関連記事

User Defined Runtime Attributeについての覚書

UILabelに上下左右のパディングをつける方法を探して、結局「自分で以下のようなメソッドを持った拡

記事を読む

UITableViewのセルセパレータが画像の下部分だけ切れる場合の対応

iOS7のUItableViewCellだと、UITableView.imageViewに画

記事を読む

UITableViewCellのロングタップ

UITableViewCellをロングタップしたときに、タップされたセルを認識しつつメニューを出した

記事を読む

StoryboardからPopoverを作っても位置合わせコードは必要

これだけだとわかりづらいんですが。 XcodeのStoryboardから、Segueを"Prese

記事を読む

iOS6時代のアプリのiOS7への対応

やや古い情報になるが、iOS7対応に関して自分がやったことの覚え書き。いろんな所から拾って来た情

記事を読む

メソッドの呼び出し元を調べる

特定のメソッドに関して、そのメソッドをコールしているメソッド群を調べるための手順。 (1)調べたい

記事を読む

アプリ内で自動スリープの設定を無効化する

「設定」アプリ内で設定したスリープ時間設定を無効にするためのコード。 アプリがバックグラウンドにな

記事を読む

iPadのUIModalPresentationFormSheetでキーボードが閉じない

iPadでUIModalPresentationFormSheet(全画面ではなく、中央にフロートし

記事を読む

Xcode8で余計なログを抑制する

Xcode8に更新してから、妙にログが増えたので、NSLogで明示したのと実行時エラー以外のログを吐

記事を読む

plistファイルに色を入れる

plistファイル中にUIColorを入れたい!という場合。普通RGBAの値を数値で入れるとかするけ

記事を読む

Xcode10からのimage literal / color literalの指定方法

アセットにあるUIImageの直接指定が可能なImage litera

Xcode11でのバージョン番号の取得方法

Xcode11になってバージョン番号をスクリプトから得て自動で更新する

GoogleスプレッドシートからCSVにエクスポートしたデータを得る方法

情報がない中さんざ苦労しましたが、Googleスプレッドシート(の最初

画面回転をしたあとに、UITextViewの先頭を表示する

回転によりサイズが可変するUITextViewで、縦向き(ポートレイト

NXDrawKitを導入してみる

ACEDrawingViewがObj-Cで書かれていて、いまいちメンテ

→もっと見る

    PAGE TOP ↑