Ios 以编程方式将文本插入UITextView,而不移动插入符号位置。

Ios 以编程方式将文本插入UITextView,而不移动插入符号位置。,ios,objective-c,uitextview,Ios,Objective C,Uitextview,因此,我有一个用户可以编辑的UITextView,但也可能有一些文本以编程方式插入到textView中,并且可以在textView的任意范围内插入。目前,这也会将插入符号从用户当前工作的位置移动,这是不可取的。因此,每当我这样做: self.textView.text = //some text inserted 它移动插入符号的位置。那么,防止插入符号位置移动的最佳方法是什么,或者使其完全不受编程更改的影响,只根据用户的更改而移动?在以编程方式插入文本之前,可以通过获取当前插入点 插入新文本

因此,我有一个用户可以编辑的UITextView,但也可能有一些文本以编程方式插入到textView中,并且可以在textView的任意范围内插入。目前,这也会将插入符号从用户当前工作的位置移动,这是不可取的。因此,每当我这样做:

self.textView.text = //some text inserted

它移动插入符号的位置。那么,防止插入符号位置移动的最佳方法是什么,或者使其完全不受编程更改的影响,只根据用户的更改而移动?

在以编程方式插入文本之前,可以通过获取当前插入点


插入新文本后,可以将文本视图的选定范围重置为插入之前的范围。。。或者,如果插入点在插入的新文本块之前,则需要考虑插入文本的长度,重新计算上一插入符号位置的位置。

最好的答案是设置插入的文本,但在插入后,使用以下方法设置插入符号位置:

textView.selectedRange=NSMakeRange(0,0)


第一个数字是文本视图中要放置插入符号的点。如果不管添加了什么文本,都希望将其保留在开头,那么您可以这样做。但是,您可能希望包含一个条件,以便仅在添加的非类型文本周围保留该条件。当用户输入时,您希望插入符号移动。

我认为您应该使用插入符号

例如:

let string = "some text"
let range = NSRange(location: 4, length: 0) // arbitrary range
textView.textStorage.replaceCharacters(in: range, with: string)
这样做不会导致光标移动


注意:如果您以典型的方式初始化一个
UITextView
,例如,在代码中它只是
UITextView(frame.zero,textContainer:nil)
-然后
textStorage
被设置为的一个实例,它是的一个子类,它是的一个子类。

所以我认为这也是可行的,在提出这个问题之前,我考虑过它,但是我不能让它在我的用例中正确工作。我要么错过了什么,要么我需要更多。虽然我在这方面已经工作了一段时间,但我的大脑现在已经崩溃了。