次の不具合、「入力用のポップアップ(UIAlertView) を表示中に、そのままレジューム状態に移行した場合に、青色で表示するべきボタンの文字などが、全て灰色で表示されるようになります。」は、自分が作成したプログラムのバグというよりは、iOS7の既知の問題のようです。stackoverflow にまさしく載っていました。
「iphone – How to properly dismiss a UIAlertView programmatically in iOS 7? – Stack Overflow」http://stackoverflow.com/questions/19284438/how-to-properly-dismiss-a-uialertview-programmatically-in-ios-7
次の処理で良さそうなことが書いてありましたが、自分の場合は駄目でした。全部のUIViewで行えば違うかもしれませんが、原因は、iOS7の方っぽいので、必要が無ければ、あまり面倒な修正は、回避したいです。
UIWindow *keyWindow = [[UIApplication sharedApplication] keyWindow];
if ([keyWindow respondsToSelector:@selector(setTintAdjustmentMode:)]) {
keyWindow.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
}
次に、applicationDidEnterBackground ではなくて、UIApplicationWillResignActiveNotification から呼び出してみると、今度はうまくいきました。両方ともMainThread上から呼び出されますが、呼び出されるタイミングが違います。Willという名前が付いているので、実際には存在しませんが、applicationWillEnterBackground 相当になるのだろうと思います。GUI関連でバックグランド移行時に必要な後処理は、こちらの方から呼び出すように変更して、問題解決しました。
ところで、初代iPad(iOS 5.1.1)で、UIAlertView 表示中に、バッググラウンド移行すると、次の警告がコンソール上に表示されました。UITextFieldに、resignFirstResponder を投げるといいという記事も見かけましたが、自分の場合は改善しません。延々試していたのですが、結局のところ分かりませんでした。iOS 6 でも iOS 7 でも出ないようなので、まあいいか。
wait_fences: failed to receive reply: 10004003