Я использую новый UIAlertController для отображения предупреждений. У меня есть такой код:
// nil titles break alert interface on iOS 8.0, so we'll be using empty strings
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title message: message preferredStyle: UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle style: UIAlertActionStyleCancel handler: nil];
[alert addAction: defaultAction];
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alert animated:YES completion:nil];
Теперь я хочу изменить шрифт, цвет, размер заголовка и сообщения и так далее. Как лучше всего это сделать?
Изменить: я должен вставить весь код. Я создал категорию для UIView, чтобы отображать правильные предупреждения для версии iOS.
@implementation UIView (AlertCompatibility)
+( void )showSimpleAlertWithTitle:( NSString * )title
message:( NSString * )message
cancelButtonTitle:( NSString * )cancelButtonTitle
{
float iOSVersion = [[UIDevice currentDevice].systemVersion floatValue];
if (iOSVersion < 8.0f)
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle: title
message: message
delegate: nil
cancelButtonTitle: cancelButtonTitle
otherButtonTitles: nil];
[alert show];
}
else
{
// nil titles break alert interface on iOS 8.0, so we'll be using empty strings
UIAlertController *alert = [UIAlertController alertControllerWithTitle: title == nil ? @"": title
message: message
preferredStyle: UIAlertControllerStyleAlert];
UIAlertAction *defaultAction = [UIAlertAction actionWithTitle: cancelButtonTitle
style: UIAlertActionStyleCancel
handler: nil];
[alert addAction: defaultAction];
UIViewController *rootViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
[rootViewController presentViewController:alert animated:YES completion:nil];
}
}
ios
objective-c
ios8
uialertview
uialertcontroller
Либор Заплетал
источник
источник
DISCLAIMER:
Всем, кто читает ответы ниже. Apple отклонит ваше приложение (я). Если вы склонны использовать какие-либо частные Api. И в ответах ниже ЭТО ЧТО ПРОИСХОДИТ ..Ответы:
Не уверен, что это противоречит частным API / свойствам, но использование KVC работает для меня на ios8
Для записи, можно также изменить шрифт действия предупреждения, используя эти частные API. Опять же, это может привести к отклонению вашего приложения, я еще не пытался отправить такой код.
Для Swift 4.2 в XCode 10 и выше последние 2 строки теперь:
источник
attributedTitle
для заголовка иattributedMessage
для сообщения. Не уверен, что это лучшее решение, но на данный момент для меня этого достаточно.UIAlertController
. Как можно сделать то же самое сUIAlertAction
?Вы можете изменить цвет кнопки, применив цвет оттенка к UIAlertController.
В iOS 9, если цвет оттенка окна был установлен на собственный цвет, вы должны применить цвет оттенка сразу после представления предупреждения. В противном случае цвет оттенка будет сброшен на ваш собственный цвет оттенка окна.
источник
Вы можете изменить цвет текста кнопки с помощью этого кода:
Может это тебе поможет.
источник
Вывод
источник
Быстрый перевод ответа @ dupuis2387. Разработал синтаксис для установки
UIAlertController
цвета и шрифта заголовка через KVC с помощьюattributedTitle
ключа.источник
tintColor
переходникview
или переходникappearanceWhenContainedIn
, но оттенок исчезнет, как только вы прикоснетесь к нему. Тем не менее, все еще ищу ответы.self.presentViewController(alertController, animated: true, completion: nil)
можем ли мы изменить шрифт кнопки «ОК»?Используйте
UIAppearance
протокол. Пример установки шрифта - создайте категорию для расширенияUILabel
:И его использование:
Протестировано и работает стильно
UIAlertControllerStyleActionSheet
, но, думаю, с нимUIAlertControllerStyleAlert
тоже подойдет .PS Лучше проверяйте наличие класса вместо версии iOS:
источник
Используйте
UIAppearance
протокол. Сделайте еще несколько советов,appearanceFont
чтобы изменить шрифтUIAlertAction
.Создать категорию для
UILabel
UILabel + FontAppearance.h
UILabel + FontAppearance.m
Использование:
Добавить
[[UILabel appearanceWhenContainedIn:UIAlertController.class, nil] setAppearanceFont:nil];
в ,
AppDelegate.m
чтобы заставить его работать на всехUIAlertController
.источник
if (self.font.pointSize == 13 && isBold) {
UIAlertAction
. Но, насколько я могу судить,UIAlertAction
не используетUILabel
. Он использует расширениеNSString
. github.com/nst/iOS-Runtime-Headers/blob/… Я не знаю, как вы можете настроить шрифт для файлаNSString
.Swift 5 и 5.1 . Создайте отдельный файл и поместите туда код настройки UIAlertController
Сейчас при любом действии Показать оповещение
результат
источник
Я этим пользуюсь.
Добавьте одну строку (AppDelegate) и работает для всех UIAlertController.
источник
Swift 4
Пример нестандартного шрифта в заголовке. То же самое и для других компонентов, таких как сообщение или действия.
источник
Вот расширение для Swift 4.1 и Xcode 9.4.1:
источник
Я только что выполнил замену
UIAlertController
. Это единственный разумный путь, я думаю:старый
Вот мой метод в Swift, который собирает много информации из ответов здесь
В некоторых случаях это работает идеально, а в других - совсем не работает (цвета оттенков не отображаются должным образом).
источник
Вы можете использовать внешнюю библиотеку, такую как PMAlertController, без использования обходного пути, где вы можете заменить ненастраиваемый UIAlertController от Apple на супер настраиваемое предупреждение.
Совместим с Xcode 8, Swift 3 и Objective-C
Особенности:
источник
actionButton.titleLabel.lineBreakMode = NSLineBreakByWordWrapping
хорошо работает.Возникла проблема с настройкой цвета оттенка на виде после представления; даже если вы сделаете это в блоке завершения PresentViewController: animated: completion:, это вызовет эффект мерцания на цвете заголовков кнопок. Это неряшливо, непрофессионально и совершенно недопустимо.
Другие представленные решения зависят от того, чтобы иерархия представлений оставалась статичной, что Apple не любит делать. Ожидайте, что эти решения потерпят неудачу в будущих выпусках iOS.
Единственный верный способ решить эту проблему и делать это повсюду - это добавить категорию в UIAlertController и изменить viewWillAppear.
Заголовок:
Реализация:
Добавьте в проект .pch (предварительно скомпилированный заголовок) и укажите категорию:
Убедитесь, что вы правильно зарегистрировали свой pch в проекте, и он будет включать методы категорий в каждый класс, который использует UIAlertController.
Затем в вашем приложении делегаты метода didFinishLaunchingWithOptions импортируют вашу категорию и вызывают
и он будет автоматически распространяться на каждый экземпляр UIAlertController в вашем приложении, независимо от того, запущен ли он вашим кодом или кем-либо еще.
Это решение работает как для iOS 8.X, так и для iOS 9.X, и ему не хватает мерцания, присущего подходу после изменения оттенка после презентации. Он также полностью независим в отношении иерархии представлений подчиненных представлений UIAlertController.
Удачного взлома!
источник
Найдите эту категорию. Я могу изменить шрифт и цвет UIAlertAction и UIAlertController.
Использование:
источник
В Swift 4.1 и Xcode 10
источник
self.present(alertController, animated: true)
илиself.present(alert, animated: true)
.Решение / Взлом для iOS9
источник
Я работаю в Urban Outfitters. У нас есть модуль с открытым исходным кодом
URBNAlert
, который мы использовали во всех наших приложениях. Он основан наUIAlertController
, но имеет широкие возможности настройки.Источник здесь: https://github.com/urbn/URBNAlert
Или просто установите модуль, поместив
URBNAlert
в свой PodfileВот пример кода:
источник
Чтобы изменить цвет одной кнопки, например CANCEL, на красный цвет, вы можете использовать это свойство стиля под названием UIAlertActionStyle.destructive:
источник
Для iOS 9.0 и выше используйте этот код в делегате приложения
источник
источник
Немного неуклюже, но сейчас у меня работает установка цвета фона и текста. Я нашел это здесь .
источник
Я создал один метод Objective-C
Код отлично работает на Xcode 8.3.1. Вы можете настроить в соответствии с требованиями.
источник
Я просто использую этот вид запроса, похоже, и система, детали немного другие, так что мы ... OC реализовал инкапсуляцию всплывающих окон предупреждений и листов.
Часто встречающаяся в повседневной разработке необходимость добавить цифру в оповещение или изменить цвет кнопки, например «простой» запрос, сегодня приносит очень похожие компоненты системы и может полностью удовлетворить спрос на индивидуализированные компоненты упаковки.
Github: https://github.com/ReverseScale/RSCustomAlertView
источник