在 UITextView.attributedText 中插入 unicode 的正确方法

Posted

技术标签:

【中文标题】在 UITextView.attributedText 中插入 unicode 的正确方法【英文标题】:Correct way to insert unicode in UITextView.attributedText 【发布时间】:2019-02-11 17:59:33 【问题描述】:

我想在 UITextView 中混合 2 种字体。 Font1 有特殊的 unicode 字符,font2 没有。如果 UITextView 的主字体是 font2,如何将 Font1 插入 UITextView 而不光标跳到末尾?因为 .attributedText 是不可变的。我假设我需要创建一个 NSMutableString 并将其分配给 .attributedText。但是,这会将光标置于末尾。有没有办法在光标选择处插入 Font 1 而不会让光标跳到末尾? 提前感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以使用以下函数将属性插入光标点。

https://developer.apple.com/documentation/foundation/nsmutableattributedstring/1414947-insert

func insertAtTextViewCursor(attributedString: NSAttributedString) 

    // Find out the cursor point
    guard let selectedRange = textView.selectedTextRange else  return 

    // If cursor point found
    let cursorIndex = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start)
    let mutableAttributedText = NSMutableAttributedString(attributedString: textView.attributedText)
    mutableAttributedText.insert(attributedString, at: cursorIndex)
    textView.attributedText = mutableAttributedText

【讨论】:

好的,谢谢!!但是最后一条语句会使光标跳转到文档的末尾。我无法将文本滚动回确切的上一个光标点。您会认为保存 contentOffset 和恢复会起作用,但事实并非如此。 caretRectForPosition 有效,但并没有真正将其放回原处。

以上是关于在 UITextView.attributedText 中插入 unicode 的正确方法的主要内容,如果未能解决你的问题,请参考以下文章

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据