iOS 8 — стиль кнопки UIAlertController применяется неправильно

У меня есть UIAlertController с двумя кнопками UIAlertAction, которые я добавил: одна с надписью «ОК», а другая с надписью «Отмена». Я использую стиль UIAlertActionStyle.Default для них обоих. Тем не менее, кнопка «Отмена», похоже, имеет стиль .Cancel (сильный вес шрифта), и это не то, что я ищу. Как избавиться от этого стиля?

Примечание. Я заметил, что если я изменю порядок, в котором кнопки UIAlertAction добавляются в UIAlertController — сначала добавляется кнопка «Отмена», а затем кнопка «ОК», то вместо этого кнопка «ОК» получает сильный вес шрифта.


person Android Noob    schedule 24.03.2015    source источник


Ответы (2)


Короче говоря, iOS 8 не позволит вам иметь кнопки с жирным текстом в предупреждении.

iOS будет выделять жирным шрифтом то, что, по ее мнению, является вариантом по умолчанию. Поскольку рекомендации по пользовательскому интерфейсу призывают помещать наиболее часто запрашиваемый параметр справа, а добавление кнопок порядка определяет порядок их отображения в предупреждениях с двумя кнопками, второй добавленный параметр выделен жирным шрифтом. Установка UIAlertActionStyle на отмену по умолчанию не дает заметного эффекта с двумя кнопками.

Рекомендации по пользовательскому интерфейсу можно найти здесь. В части, на которую я ссылался, говорится:

Правильно расположите кнопки. В идеале кнопка, которую наиболее естественно нажимать, должна соответствовать двум критериям: она должна выполнять действие, которое, скорее всего, захотят пользователи, и она должна с наименьшей вероятностью вызывать проблемы, если пользователь нажмет ее непреднамеренно. В частности:

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

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

person Jeremy Conkin    schedule 24.03.2015
comment
В настоящее время у меня есть две кнопки в моем предупреждении: одна — «Удалить» с уничтожением стиля, а другая — «Отмена» с отменой стиля. Мое понимание было таким же, как и ваше, что деструктивные действия всегда идут слева. Однако независимо от того, в каком порядке я добавляю эти две кнопки, «Удалить» всегда отображается справа и имеет красный цвет. Отмена всегда отображается слева, автоматически выделяясь синим цветом и полужирным шрифтом. Так что же происходит!? - person Dave G; 22.12.2015

Это очень поздний ответ, но я опубликовал его на случай, если кому-то он пригодится в будущем.

Похоже, что даже в iOS 9.3 кнопка «Разрушение» имеет некоторый внутренний приоритет над кнопкой «Отмена». Таким образом, для UIAlertController с одной кнопкой "Разрушение" и одной кнопкой "Отмена" кнопка "Разрушение" всегда отображается справа.

Чтобы преодолеть это, я изменил стиль кнопки «Отмена» на UIAlertActionStyleDefault и установил ее preferredAction на кнопку 1 (кнопка по умолчанию), чтобы она выглядела как оригинальная кнопка «Отмена».

Код примерно такой:

UIAlertController* alert = [UIAlertController alertControllerWithTitle:@"Alert" message:@"Are you sure that you want to delete selected picture(s)?" preferredStyle:UIAlertControllerStyleAlert];
[alert addAction:[UIAlertAction actionWithTitle:@"Yes" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) {
    //delete
    [alert dismissViewControllerAnimated:YES completion:NULL];
}]];
[alert addAction:[UIAlertAction actionWithTitle:@"No" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
    [alert dismissViewControllerAnimated:YES completion:NULL];
}]];
alert.preferredAction = alert.actions[1];
[self presentViewController:alert animated:YES completion:NULL];

И как-то это работает, как и ожидалось!

PS: код написан на Objective C, но, думаю, его легко преобразовать в Swift.

person Ayan Sengupta    schedule 01.06.2016