アプリがバックグラウンドに入ると、モーダルに表示されたビュー コントローラーが次のようにアラート ビューを閉じます...
// called when view controller receives a UIApplicationDidEnterBackgroundNotification
- (void)applicationDidEnterBackground:(NSNotification *)notification
{
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.alertView = nil;
}
}
アプリが終了せずにフォアグラウンドに戻ると、アラート ビューが表示されなくなります。ただし、(UINavigationController からの) ナビゲーション バーのバー ボタン項目は、アラート ビューがまだ表示されているかのように淡色表示されます。
さらに、(淡色表示されたバー ボタン項目をタップして) モーダル ビュー コントローラーを閉じると、表示中のビュー コントローラーのバー ボタン項目も淡色表示になっていることがわかります。バー ボタンの項目は機能しますが、淡色表示のままです。
では、バー ボタンのアイテムを非表示にするにはどうすればよいでしょうか。または、アプリがバックグラウンドに入るのに応答して、iOS 7 でプログラムによってアラート ビューを適切に閉じるにはどうすればよいですか?
iOS 7 UI Transition Guideには、次のように記載されています。
アラートまたはアクション シートが表示されると、iOS 7 はその背後にあるビューの色合いを自動的に暗くします。この色の変化に対応するために、レンダリングで tintColor を使用するカスタム ビュー サブクラスは、必要に応じてレンダリングを更新するために tintColorDidChange をオーバーライドする必要があります。
私のナビゲーション バーとバー ボタン アイテムはカスタム ビューではありません。私はそれらをサブクラス化しませんでした。デフォルトの属性を使用して、ストーリーボードにナビゲーション バーを作成しました (バー ボタン項目と同じ)。したがって、tintColorDidChange をオーバーライドする場所はありません。
すべてのビューで、tintColor プロパティにデフォルト値を使用しています。
色合いをデフォルト値に再設定しようとしましたが、成功しませんでした:
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.view.tintColor = nil;
self.view.window.tintColor = nil;
self.alertView = nil;
}
また、View Controller の viewDidAppear: で色合いを再設定しようとしましたが、成功しませんでした。
また、メイン ビューの tintAdjustmentMode を「通常」に設定しようとしましたが、成功しませんでした。
if (self.alertView) {
[self.alertView dismissWithClickedButtonIndex:0 animated:NO];
self.alertView = nil;
self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
}
ちなみに、アプリがバックグラウンドで終了した場合、アプリは正しい色合いのバー ボタン項目で再起動します (つまり、淡色表示されません)。