13

アプリがバックグラウンドに入ると、モーダルに表示されたビュー コントローラーが次のようにアラート ビューを閉じます...

// 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;
}

ちなみに、アプリがバックグラウンドで終了した場合、アプリは正しい色合いのバー ボタン項目で再起動します (つまり、淡色表示されません)。

4

3 に答える 3

9

これはApple側のバグだと確信しています。https://bugreport.apple.comでバグ レポートを提出しました。重複したバグ レポートを提出して、Apple に注意を向けてもらうようにしてください。これが、 Apple がバグに優先順位を割り当てる方法です。

于 2013-11-06T22:50:19.710 に答える
7

アプリで同じバグが発生し、回避策が見つかりました。UIAlertView がバックグラウンドで閉じられた後、アプリケーションのメイン ウィンドウで tintAdjustmentMode を UIViewTintAdjustmentModeNormal に設定するだけです。簡単 :)

于 2013-12-07T00:56:10.340 に答える