我正在尝试创建一个Swift自定义文本编辑器(轻量级版本),但在iOS 8上卡住了,
我创建了一个小项目样例,你可以下载并运行以下场景:
1.选择一段文本 2.点击“B”按钮 3.点击“I”按钮
应用程序会崩溃,
fontDescriptorWithSymbolicTraits
返回nil
。是否有任何Swift的解决方法?我创建了一个小项目样例,你可以下载并运行以下场景:
1.选择一段文本 2.点击“B”按钮 3.点击“I”按钮
应用程序会崩溃,
fontDescriptorWithSymbolicTraits
返回nil
:(private func addOrRemoveTraitWithName(traitName: String, traitValue: UInt32) {
let range = self.textEditor.selectedRange
let currentAttributesDict = self.textEditor.textStorage.attributesAtIndex(range.location, effectiveRange: nil)
let currentFont = currentAttributesDict[NSFontAttributeName]
let fontDescriptor = currentFont?.fontDescriptor()
let fontNameAttribute = fontDescriptor?.fontAttributes()[UIFontDescriptorNameAttribute]
var changedFontDescriptor: UIFontDescriptor?
if fontNameAttribute?.rangeOfString(traitName).location == NSNotFound {
let existingTraitsWithNewTrait = UIFontDescriptorSymbolicTraits(rawValue: fontDescriptor!.symbolicTraits.rawValue | traitValue)
changedFontDescriptor = fontDescriptor?.fontDescriptorWithSymbolicTraits(existingTraitsWithNewTrait)
} else {
let existingTraitsWithoutTrait = UIFontDescriptorSymbolicTraits(rawValue: fontDescriptor!.symbolicTraits.rawValue & ~traitValue)
changedFontDescriptor = fontDescriptor?.fontDescriptorWithSymbolicTraits(existingTraitsWithoutTrait)
}
let updatedFont = UIFont(descriptor: changedFontDescriptor!, size: 0.0)
var dict = [String : AnyObject]()
dict[NSFontAttributeName] = updatedFont
self.textEditor.textStorage.beginEditing()
self.textEditor.textStorage.setAttributes(dict, range: range)
self.textEditor.textStorage.endEditing()
}
我强烈建议您快速查看示例项目
有哪些选项可供选择?
我还看到,在苹果文档上被其他人使用的方法在SDK和文档中已经缺失
其他人对此的看法:
symTraitValue
和symTraitMask
不应该来自UIFontDescription
吗? - el.severo