Изменить размер шрифта заголовка UIAlertController

Я пытаюсь изменить заголовок fontSize в UIAlertController, но не могу понять, как установить NSMutableAttributedString в свойство title.

Итак, я создал NSMutableAttributedString со следующим кодом:

let title = NSMutableAttributedString(string: user.fullName)
let range = NSRange(location: 0, length: title.length)
title.addAttribute(NSAttributedStringKey.font, value: UIFont.TextStyle.largeTitle, range: range)

Теперь сложная часть для меня заключается в том, как выяснить, как установить новый заголовок на UIAlertController, потому что он ожидает значение String?.

Я осмотрелся и обнаружил, что мне, вероятно, следует создать UILabel в блоке завершения при представлении UIAlertController. Но как переопределить свойство title в UIAlertController своим собственным UILabel?

present(myUIAlertController, animated: true) {
    // Creating the UILabel depending on string length
    // Set the NSMutableAttributedString value to the custom UILabel and override title property.
}

Или, может быть, есть еще более простой способ решить эту проблему?


Моя цель - получить изображение ниже:

UIAlertViewController с большим заголовком


person Jacob Ahlberg    schedule 30.08.2018    source источник
comment
Можете ли вы использовать список действий, похожий на UIView или UITableView? Его можно легко настроить в соответствии с вашими требованиями. Доступны даже пользовательские листы действий.   -  person TheTiger    schedule 30.08.2018
comment
вот ответ stackoverflow.com/a/36136625/8417137 в этой строке alertController.setValue(attributedString, forKey: attributeTitle)   -  person Alex Kolovatov    schedule 30.08.2018
comment
Внесение каких-либо изменений во встроенный элемент управления без использования встроенных функций не является хорошей идеей. Если  внесет какие-либо изменения в этот API, это может привести к повреждению в будущем. Так что лучше сделать свой собственный контроль.   -  person TheTiger    schedule 30.08.2018
comment
Проверьте этот github.com/urbn/URBNAlert.   -  person Khushbu Desai    schedule 30.08.2018


Ответы (2)


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

func showAlert() {
  let alert = UIAlertController(title: "", message: "", preferredStyle: .actionSheet)        
  let titleAttributes = [NSAttributedStringKey.font: UIFont(name: "HelveticaNeue-Bold", size: 25)!, NSAttributedStringKey.foregroundColor: UIColor.black]
  let titleString = NSAttributedString(string: "Name Last name", attributes: titleAttributes)     
  let messageAttributes = [NSAttributedStringKey.font: UIFont(name: "Helvetica", size: 17)!, NSAttributedStringKey.foregroundColor: UIColor.red]
  let messageString = NSAttributedString(string: "Company name", attributes: messageAttributes)
  alert.setValue(titleString, forKey: "attributedTitle")
  alert.setValue(messageString, forKey: "attributedMessage")
  let labelAction = UIAlertAction(title: "Label", style: .default, handler: nil)
  let deleteAction = UIAlertAction(title: "Delete", style: .destructive, handler: nil)
  let cancelAction = UIAlertAction(title: "Cancel", style: .cancel, handler: nil)
  alert.addAction(labelAction)
  alert.addAction(deleteAction)
  alert.addAction(cancelAction)
  self.navigationController?.present(alert, animated: true, completion: nil)

}

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

person Sunny    schedule 30.08.2018

Нет другого способа, кроме как использовать частный API.

Я могу предложить вам сделать свой AlertViewController со свойствами, которые вы хотите настроить.

person ezaji    schedule 30.08.2018
comment
Следует избегать частных API, так как Apple может отклонить приложения после их выпуска. - person Giovanni Palusa; 30.08.2018
comment
Да, я полностью согласен с вами. Использование приватного API является причиной отклонения вашего приложения Apple. Но вы можете использовать его в образовательных целях или что-то в этом роде. - person ezaji; 30.08.2018