*

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

関連記事

ENMLからHTMLへの変換

最近EvernoteAPIをいじっているので、コレに関するノウハウをとりあえず断片的に引っかかったと

記事を読む

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

アセットにあるUIImageの直接指定が可能なImage literalですが、気がついたらアセット

記事を読む

UISplitViewControllerの仕切り線の色を設定

UISplitViewControllerで、iPadを横向き(Landscape)にしたときの2つ

記事を読む

iOS7の青色

iOS7の標準UIで使われている、水色に近い青の色についての記事です。 あの色には特に名前を決まっ

記事を読む

UIButtonのLocalizeに関するTips

Storyboardに設置したUIButtonのタイトルのLocalizeをしてたのですが、英語では

記事を読む

警告を無視する

HokusaiというライブラリをObj-Cのアプリで使うために奮闘してるのですが(これはこれで別記事

記事を読む

NSDictionary/NSMutableDictionaryの”valueForKey:”と”objectForKey:”の違い

表題にある通り、似ていて混同する(そして、取り違えても「たいてい」普通に動作する)NSDiction

記事を読む

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

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

記事を読む

Bitbucketの画面の日本語化/コミット時に同時プッシュを行う

前回の記事の続きで、Bitbucketの画面の日本語化と、Xcodeでコミットするときに同時にpus

記事を読む

iOS9でURLスキームを登録する

私事ですが、iOS8から対応はしたいということで検証用に使っている自分のiPhoneもiOS8でがん

記事を読む

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

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

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

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

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

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

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

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

NXDrawKitを導入してみる

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

→もっと見る

    PAGE TOP ↑