3

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

self.textView.text = //some text inserted

它移动插入符号的位置。那么,防止插入符号位置移动的最佳方法是什么,或者让它完全不了解并独立于程序更改而仅响应用户更改而移动?

4

3 回答 3

1

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

textView.selectedRange = NSMakeRange(0,0)

第一个数字是文本视图中您要放置插入符号的位置。如果您想将其保留在开头而不管添加任何文本,这就是您将如何做到的。但是,您可能希望包含一个条件以仅在添加的非键入文本周围保留此条件。当用户键入时,您希望插入符号移动。

于 2013-08-03T01:13:38.927 回答
0

在以编程方式插入文本之前,您可以通过UITextView 的 " selectedRange" 属性获取当前插入点。

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

于 2013-08-03T01:13:24.863 回答
0

我认为您应该使用UITextView'textStorage属性

例如:

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被设置为一个实例NSConcreteTextStorage,它是一个子类NSTextStorage,它是一个子类NSMutableAttributedString

于 2017-08-12T15:33:17.187 回答