选择的文本视图字符串粗体,斜体,下划线,如本机"注释" iOS的应用程序

时间:2018-01-03 01:47:03

标签: ios swift textkit

是否有任何帮助使选定的文本视图字符串粗体,斜体,下划线像本机"注释" iOS的应用程序。请给我一些有用的链接。我厌倦了整整一天的搜索。非常感谢。

我附加了我的代码,使属性字符串Bold和Italic都像iPhone的本机应用程序" Notes"。

attributedString.beginEditing()
attributedString.addAttributes([NSFontAttributeName: UIFont.boldSystemFont(ofSize: CGFloat(app_delegate.settings.chatFontSize))], range: range)
attributedString.addAttributes([NSFontAttributeName: UIFont.italicSystemFont(ofSize: CGFloat(app_delegate.settings.chatFontSize))], range: range)
attributedString.endEditing()

但它只提供斜体字符串,而不是粗体字。我需要Italic和Bold。感谢。

3 个答案:

答案 0 :(得分:7)

您的代码中的问题是您设置斜体字体并覆盖您刚刚设置的粗体字体。您需要的是使用UIFontDescriptor符号特征,如您在此SO answer中所见。因此,只需初始化您的系统字体,获取其字体描述符并向其添加traitBold和traitItalic。然后,您只需使用UIFont初始值设定项init(descriptor: UIFontDescriptor, size pointSize: CGFloat)初始化新字体:

Swift 4代码:

attributedString.beginEditing()
let systemFont: UIFont = .systemFont(ofSize: 32)
if let descriptor = systemFont.fontDescriptor.withSymbolicTraits([.traitBold, .traitItalic]) {
    let systemFontBoldAndItalic = UIFont(descriptor: descriptor, size: 32)
    attributedString.addAttributes([.font: systemFontBoldAndItalic, .underlineStyle: NSUnderlineStyle.styleSingle.rawValue], range: NSRange(location: 0, length: attributedString.string.utf16.count))
}
attributedString.endEditing()

答案 1 :(得分:0)

看看NSAttributedString。您可以使用它来创建在不同范围内具有混合属性的字符串。

在Objective-C中,可变版本NSMutableAttributedString具有setAttributes(_:range:)等方法,可让您更改指定范围内属性字符串的属性。

因此,您从普通的String对象开始初始化NSMutableAttributedString,然后使用setAttributes(_:range:)函数在字符串的范围内设置不同的属性,如粗体,斜体等。

(不,我没有方便的示例代码。)

答案 2 :(得分:0)

虽然这个问题很老但可能对某人有所帮助。

使用NSMutableAttributedString无法解决问题,因为如果您在自定义文本之前键入任何位置,则范围将不同。因此,定制将转移以满足更新的范围。 我认为如果你有一个很长的字符串,使用HTML是更好的解决方案。 您可以考虑使用一些开源库,例如ZSSRichTextEditor 希望有所帮助。