Можно ли установить собственный шрифт и размер для NSString?
Я работаю со Swift в iOS 9. Я хочу настроить шрифт для UIAlertAction
, Я искал эти вопросы для быстрого ответа:
Изменить шрифт UIAlertAction в Swift
Можно ли настроить шрифт и внешний вид UIAlertController в новом XCode с iOS8?
И этот вопрос для ответа Objective C: пользовательский шрифт UIAlertController, размер, цвет
Но не было никакого решения для настройки шрифта для UIAlertAction
,
Я считаю, что проблема в том, что UIAlertAction
использует NSString
для его title
имущество. Смотрите демонстрационный проект на Github.
Я хотел бы создать строку так:
let originalString: String = "OK"
let myString: NSString = originalString as NSString
А затем настроить шрифт и размер строки. Затем, после добавления моих действий в контроллер предупреждений, присвойте строку моим действиям, используя кодирование значения ключа:
alertController!.actions[0].setValue(myString, forKey: "title")
Но, насколько я могу судить, нет никакого способа установить собственный шрифт и размер для NSString
, Если бы он использовал UILabel
вместо этого было бы легко настроить шрифт. Но я, кажется, застрял с ограничениями строк. Кто-нибудь знает способ назначения нестандартного шрифта и размера для строки, или я прав, полагая, что нет способа сделать это?
1 ответ
Вы бы использовали NSAttributedString
(или его изменчивый аналог, NSMutableAttributedString
) сделать строку с пользовательской информацией. Как конструктор принимает NSString
(или же String
в Swift), это не займет NSAttributedString
(NSAttributedString
не подкласс NSString
.).
Вы могли бы выдумать компилятор Swift для передачи NSAttributedString
с помощью unsafeBitCast
, но UIAlertAction
может не понравится
Глядя на пользовательский шрифт UIAlertController, размер, цвет, кажется, что вы можете установить его с помощью KVO. Код для этого так:
var alertVC = UIAlertController(title: "Dont care what goes here, since we're about to change below", message: "", preferredStyle: .ActionSheet)
let hogan = NSMutableAttributedString(string: "Presenting the great... Hulk Hogan!")
hogan.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(50), range: NSMakeRange(24, 11))
alertVC.setValue(hogan, forKey: "attributedTitle")