是否可以设置自定义字体& NSString的大小?

时间:2015-11-04 22:04:31

标签: string swift nsstring ios9 uialertaction

我在iOS 9中使用Swift。我想自定义UIAlertAction的字体。我搜索了这些问题以获得Swift的答案:

Change the Font of UIAlertAction in Swift

Is it possible to customize the font and appearance of a UIAlertController in the new XCode w/ iOS8?

对于Objective-C答案的这个问题: UIAlertController custom font, size, color

但是没有自定义UIAlertAction字体的解决方案。

我认为问题在于UIAlertAction使用NSString作为其title属性。 See demo project on Github.

我想像这样创建一个字符串:

let originalString: String = "OK"
let myString: NSString = originalString as NSString

然后自定义字符串的字体&尺寸。然后,在将我的操作添加到警报控制器后,使用键值编码将字符串分配给我的操作:

alertController!.actions[0].setValue(myString, forKey: "title")

但据我所知,没有办法为NSString设置自定义字体和大小。如果它使用UILabel代替,则可以轻松自定义字体。但我似乎陷入了字符串的限制。有没有人知道如何分配自定义字体&大小到一个字符串,或者我认为没有办法做到这一点是正确的吗?

1 个答案:

答案 0 :(得分:1)

您可以使用NSAttributedString(或其可变副本NSMutableAttributedString)来创建包含自定义信息的字符串。由于构造函数采用NSString(或Swift中的String),因此不会NSAttributedStringNSAttributedString不是NSString的子类。) 。

你可以捏造Swift编译器使用NSAttributedString传递unsafeBitCast,但UIAlertAction可能不喜欢它。

查看UIAlertController custom font, size, color,您似乎可以使用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")