こんにちは、boxcarが大好き人間、するぷ (@isloop) です。
このアプリ、公式RTが来たり、ふぁぼが来たりすると、いち早く通知してくれるのですが、そいつのせいで、するぷろ for iPhoneにバグがあることを教えてくれました・・・。
しかも、結構やっかいなんですよねぇ、このバグ・・・。内容としてはこんな感じ。
「UIAlertView + UITextFieldが表示中に、さらにキーボードがでてる間に、外部から通知がくると、それがキーボードの裏に隠れて閉じれなくなって、操作不能になる」というもの・・・。
はい。なんのこっちゃか分かりませんね。続きから画で説明します・・・。
こんな状態になってなにも手が出せなくなるorz
・・・。
うぉぉぉぉおおん! 閉じる押せねぇぇぇぇえええ!!!
というわけで、こんな感じに書いてみた。
こんなコードを書いたら回避出来たので忘備録替わりに乗せておくます。
- (void)viewWillAppear:(BOOL)animated { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil]; } - (void)viewWillDisappear:(BOOL)animated { [[NSNotificationCenter defaultCenter] removeObserver:self name:UIApplicationWillResignActiveNotification object:nil]; } - (void)applicationWillResignActive:(NSNotificationCenter *)center{ [textField resignFirstResponder]; }
外部通知が来たら、UIApplicationWillResignActiveNotificationが拾う。
見た目はまるで同じな外部通知は、UIAlertViewの一種かとおもって、delegateを漁り尽くしたのですが、どれもブレイクポイントに引っかかってくれず・・・。
いつもありがたい助言をくれる@takatomoさんに聞いてみたら、「UIApplicationWillResignActiveNotification」が拾ってくれるかもと、またしても、ありがたい助言をしてくれまして、やってみたらバッチリでやんした! @takatomoさんマジ天使!!
UIApplicationWillResignActiveNotificationは、アプリが非アクティブになる直前にくるらしく、外部通知が来た場合や、アプリを切り替えたときに通知されるものだそうです。またひとつ勉強になりましたありがたやありがたや。
ちなみに、UIApplicationのNotificationの解説は以下のページがとても詳しかったです。
AppDelegateクラスでapplicationWillTerminate:メソッドをオーバーライドしてあると、アプリケーション終了時に当該メソッドを呼んでくれるので、後片付けなどに重宝します。
さて、このキーボードの裏に隠れてしまうバグは、現在申請中のver1.02で改善されます。申請してから、もうそろそろ一週間経つので、もうすぐアップデートが来ると思います。もう少しお待ちくださいませ・・・。