Подтвердить что ты не робот

Как правильно отклонить UIAlertView программно в iOS 7?

Когда мое приложение входит в фоновый режим, мой представленный мной диспетчер представлений отклоняет вид предупреждения так же...

// 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 iI указано следующее:

Когда появляется предупреждение или панель действий, 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;
    }

Я также попытался повторно установить цвет оттенка в представлении контроллера viewDidAppear: без успеха.

Я также попытался настроить основной режим tintAdjustmentMode на "обычный" без успеха:

if (self.alertView) {
    [self.alertView dismissWithClickedButtonIndex:0 animated:NO];
    self.alertView = nil;

    self.view.tintAdjustmentMode = UIViewTintAdjustmentModeNormal;
}

Кстати, если приложение было завершено в фоновом режиме, приложение возобновляет работу с элементами кнопки панели, имеющими правильный оттенок (то есть, без затемнения).

4b9b3361

Ответ 2

Я испытал ту же ошибку в своем приложении и успешно нашел обходной путь. Все, что вам нужно сделать, - установить tintAdjustmentMode в UIViewTintAdjustmentModeNormal в главном окне вашего приложения после удаления UIAlertView в фоновом режиме. Легко:)

Ответ 3

Хотя я могу отклонить представление предупреждения программно в ответ на UIApplicationDidEnterBackgroundNotification, автоматическое затемнение в iOS 7 не будет обновляться.

Тем не менее, поведение автоматического затемнения будет реагировать, если я отклоню представление предупреждения в ответ на UIApplicationWillResignActiveNotification вместо этого.

// called when view controller receives a UIApplicationWillResignActiveNotification
- (void)applicationWillResignActiveNotification:(NSNotification *)notification
{
    if (self.alertView) {
        [self.alertView dismissWithClickedButtonIndex:0 animated:NO];
        self.alertView = nil;
    }
}