Можно ли установить собственный шрифт и размер для 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")
Другие вопросы по тегам