用户开始输入时如何记住 UITextView 中的文本属性

Posted

技术标签:

【中文标题】用户开始输入时如何记住 UITextView 中的文本属性【英文标题】:How to remember text attributes in UITextView when the user starts typing 【发布时间】:2015-08-11 16:55:38 【问题描述】:

我正在使用UITextView,并尝试在用户键入时使用attributedText 属性显示文本。

这是我当前的代码:

textView.attributedText = NSMutableAttributedString(
    string: "",
    attributes: [
        NSFontAttributeName: UIFont(name: "AvenirNextLTPro-Regular", size: 12.5)!,
        NSForegroundColorAttributeName: UIColor.colorFromCode(0x262626),
        NSKernAttributeName: 0.5,
        NSParagraphStyleAttributeName: paragraphStyle
    ]
)

问题在于,如果您提供一个空字符串,当用户开始输入时,文本不会使用attributedText 属性进行格式化。

但是,我注意到如果我提供一个字符串,当用户开始附加该字符串时,文本会使用attributedText 属性进行格式化。

我认为完成我需要的唯一方法是覆盖此函数并将文本设置为每次用户输入键时的属性:

func textView(textView: UITextView, shouldChangeTextInRange range: NSRange, replacementText text: String) -> Bool

没有其他更好的方法吗?

【问题讨论】:

【参考方案1】:

您需要使用typingAttributes 属性,而不是设置一个空的属性字符串。

textView.typingAttributes = [
    NSFontAttributeName: UIFont(name: "AvenirNextLTPro-Regular", size: 12.5)!,
    NSForegroundColorAttributeName: UIColor.colorFromCode(0x262626),
    NSKernAttributeName: 0.5,
    NSParagraphStyleAttributeName: paragraphStyle
]

另请参阅official documentation。

应用于用户输入的新文本的属性。

【讨论】:

有没有办法用 UILabel 做类似的事情?例如,我有一个没有文本的 UILabel,但是当我解析我的 JSON 时,我正在向其中添加文本 @Thomas 恐怕不会。在 UILabel 上,您必须使用 attributedText 属性。

以上是关于用户开始输入时如何记住 UITextView 中的文本属性的主要内容,如果未能解决你的问题,请参考以下文章

编辑开始时 UITextView 光标移动

UITextView输入中文时限制字数

无法从 iOS 中的 UITextView 获取已删除的字符

当用户输入 29 个字符时,将 UITextView 插入符号移动到新行?

Swift 4 或 Swift 5 中的 UITextView 用户输入文本验证:限制 Swift 中的特定字符

如何在 UITextView 中为文本着色