Изменить цвет заголовка UIAlertController

Я новичок в разработке iOS.

Я пытаюсь изменить заголовок и цвет сообщения UIAlertController, но не работает, цвет не меняется.

Вот мой код:

let alert = UIAlertController(title: NSLocalizedString("notifications_popup2_title", comment: ""), message: NSLocalizedString("notifications_popup2_message", comment: ""), preferredStyle: UIAlertControllerStyle.actionSheet)

        // Change font of the title and message
        let titleFont:[NSAttributedStringKey : AnyObject] = [ NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue) : UIFont(name: "Flama-Basic", size: 22)!, NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue) : UIColor(hexString: "#2e2e2e")! ]
        let messageFont:[NSAttributedStringKey : AnyObject] = [ NSAttributedStringKey(rawValue: NSAttributedStringKey.font.rawValue) : UIFont(name: "Flama-light", size: 18)!, NSAttributedStringKey(rawValue: NSAttributedStringKey.foregroundColor.rawValue) : UIColor(hexString: "#2e2e2e")! ]
        let attributedTitle = NSMutableAttributedString(string: NSLocalizedString("notifications_popup2_title", comment: ""), attributes: titleFont)
        let attributedMessage = NSMutableAttributedString(string: NSLocalizedString("notifications_popup2_message", comment: ""), attributes: messageFont)
        alert.setValue(attributedTitle, forKey: "attributedTitle")
        alert.setValue(attributedMessage, forKey: "attributedMessage")

Если я изменю стиль оповещения на .alert, он работает …

введите здесь описание изображения

Добро пожаловать в SO! Пожалуйста, объясните, что вы имеете в виду, но не работает. Также прочтите Как задать вопрос.   —  person noquart3r    schedule 29.11.2019

Выкладываю скриншот. Я думаю не определяет цвет   —  person noquart3r    schedule 29.11.2019

Заголовок / сообщение UIAlertController принимает строковое свойство, а не строку с атрибутами, поэтому я ожидал, что они не сработают. Я предполагаю, что это работает для предупреждения по причинам совместимости с устаревшими версиями.   —  person noquart3r    schedule 29.11.2019

Не надо. Это использует частные свойства / библиотеки, это может измениться, как это было (например, между iOS 12 и iOS13), и поэтому больше не будет работать, и когда-нибудь может быть причиной Apple отклонить приложение. Вместо этого создайте свой собственный.   —  person noquart3r    schedule 29.11.2019

Ср. stackoverflow.com/questions/58224830/   —  person noquart3r    schedule 29.11.2019

См. также:  Эффективность запросов Firebase с использованием поля where и альтернативы
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 1
  1. noquart3r

    Некоторые из используемых вами кодов устарели, например:

    NSAttributedStringKey
    

    сейчас:

    NSAttributedString.Key
    

    также вам не нужно указывать rawValue. вам просто нужно что-то вроде:

        let alertController = UIAlertController(title: "title", message: "message", preferredStyle: .alert)
        alertController.setValue(NSAttributedString(string: "title", attributes: [.foregroundColor : UIColor.red]), forKey: "attributedTitle")
        alertController.setValue(NSAttributedString(string: "message", attributes: [.foregroundColor : UIColor.blue]), forKey: "attributedMessage")
    

    Результат:  Оповещение

    Обратите внимание, что это работает только для .alert. .actionSheet заголовок и сообщение нельзя раскрашивать, в отличие от .alert

    Также помните, что использование частного API может вызвать отказ. Но опыт показывает, что только частные методы, имена которых начинаются с символа «_», вызывают отказ от системы обнаружения использования частных методов в AppStore.

    Также может перестать работать в любой момент, если Apple решит его изменить.

    Наилучший вариант — создать собственное оповещение самостоятельно.

    Вы абсолютно правы, @Sulthan. но опыт показывает, что только частные методы, имена которых начинаются с _, вызывают отказ от системы обнаружения использования частных методов AppStore. Я упомянул об этом в ответе. Спасибо person noquart3r; 29.11.2019

    Я не говорю об отказах, я говорю о том, что это требует предупреждения. Обычно безопаснее использовать настраиваемый контроллер предупреждений. person noquart3r; 29.11.2019

    Извините, я не понял этого. Вы как всегда правы. Я обновил ответ и упомянул обе проблемы. Еще раз спасибо @Sulthan person noquart3r; 29.11.2019

    Он только что изменился, к сведению в IOS13: stackoverflow.com/questions/58224830/ person noquart3r; 29.11.2019

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: