UITextView中光标位置插入文字

2020-12-10  本文已影响0人  山已几孑

原因很狗血,写好的功能,别人用崩溃,自己用没啥问题

Bug的原因很简单,就是已输入文字中含有了Emojy表情,导致textView的selectedRange和String的endIndex 对不上,导致超出范围。
比如 伪代码:

textView.text = “12345” 
// 的长度是都是5

textView.text = “12345🙀”
//textView.selectedRange.location = 7
//textView.text.count = 6

而之前的写法是直接把string插入到当前的text中,再赋值给textView,伪代码:

let targetText = ""
var text = textView.text
let range = textView.selectedRange
// 崩在了这里,超出范围额
let index = str.index(str.startIndex, offset: range.location)
text.insert(targetText, atIndex: index)
textView.text = text

这一大段写下来,丑着还挺像回事的,然鹅啊,哎


百度过程不表


最终在这里:how to insert text at any cursor position in uitextview?

有这么一句

[textView replaceRange:textView.selectedTextRange withText:insertingString];

好嘛,selectedTextRange 是一个UITextRange类型的对象,自己转好像还挺麻烦的,好在是系统API。
这个func replace(_ range: UITextRange, withText text: String)也是textView的方法,一句话就完事儿了。

哎,孤陋寡闻了😷😷😷,百度也孤陋寡闻,查的驴唇不对马嘴。

上一篇下一篇

猜你喜欢

热点阅读