【问题标题】:Change current UITextView Writing Attributes更改当前 UITextView 写入属性
【发布时间】:2019-11-28 15:12:37
【问题描述】:

我正在尝试创建一个带有“加粗”功能的简单按钮,就像在 Apple Notes 应用程序中一样。这将:

  1. 如果选择文本,则选择粗体或非粗体。
  2. 如果未选择任何文本,则更改当前的书写属性以及按钮的图标以表示您是否以粗体输入。

我无法解决第 2 部分的问题。我该如何解决和更改当前 UITextView 的书写属性?

func textViewDidChangeSelection(_ textView: UITextView) {
    selectedRange = noteContents.selectedRange
}

func bold() {
    let attributedString = NSAttributedString(attributedString: noteContents.attributedText)

    if let textRange = selectedRange {
        //If text is NOT selected
        switch textRange.length {
        case 0:

            //Work out current writing attributes and change them

        default:
            //If text IS selected
            print("Selected")
            print(textRange.length)
            //Enumerate all the fonts in the selectedRange
            attributedString.enumerateAttribute(.font, in: textRange, options: []) { (font, range, pointee) in
                let newFont: UIFont
                if let font = font as? UIFont {
                    var fontTraits = font.fontDescriptor.symbolicTraits
                        //If selected text contains Bold
                    if fontTraits.contains(.traitBold) {
                        fontTraits.remove([.traitBold])
                        let fontAtrDetails = font.fontDescriptor.withSymbolicTraits(fontTraits)
                        newFont = UIFont(descriptor: fontAtrDetails!, size: font.pointSize)
                    } else {
                        //If selected text does not contain Bold
                        fontTraits.insert([.traitBold])
                        let fontAtrDetails = font.fontDescriptor.withSymbolicTraits(fontTraits)
                        newFont = UIFont(descriptor: fontAtrDetails!, size: font.pointSize)
                    }
                    noteContents.textStorage.addAttributes([.font : newFont], range: textRange)
                }
            }
        }
    }
}

【问题讨论】:

  • 我记得textview有typingAttributes,你可以在飞行中更改它们
  • @AlexandrKolesnik 如何更改类型属性?
  • smth like this textView.typingAttributes = [.font: UIFont.boldSystemFont(ofSize: 16)]

标签: ios swift uitextview


【解决方案1】:

在第二种情况下,您必须将粗体按钮配置为指示该按钮被选中或未选中。 在所选范围内的粗体按钮 Action change 属性中,tutorial 会有所帮助

【讨论】:

    猜你喜欢
    • 2014-05-26
    • 2017-04-17
    • 1970-01-01
    • 2016-07-04
    • 1970-01-01
    • 2011-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-02-21
    相关资源
    最近更新 更多