获取和设置光标帖子
有用的信息
文本字段文本的开头:
let startPosition: UITextPosition = textView.beginningOfDocument
文本字段文本的最后:
let endPosition: UITextPosition = textView.endOfDocument
当前选择的范围:
let selectedRange: UITextRange? = textView.selectedTextRange
获取光标位置
if let selectedRange = textView.selectedTextRange {
let cursorPosition = textView.offsetFromPosition(textView.beginningOfDocument, toPosition: selectedRange.start)
print("\(cursorPosition)")
}
设置光标位置
为了设置位置,所有这些方法实际上都设置了具有相同开始值和结束值的范围。
到了开始
let newPosition = textView.beginningOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
到最后
let newPosition = textView.endOfDocument
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
到当前光标位置左侧的一个位置
// only if there is a currently selected range
if let selectedRange = textView.selectedTextRange {
// and only if the new position is valid
if let newPosition = textView.positionFromPosition(selectedRange.start, inDirection: UITextLayoutDirection.Left, offset: 1) {
// set the new position
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}
}
到任意位置
从头开始,向右移动 5 个字符。
let arbitraryValue: Int = 5
if let newPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
textView.selectedTextRange = textView.textRangeFromPosition(newPosition, toPosition: newPosition)
}
有关
选择所有文字
textView.selectedTextRange = textView.textRangeFromPosition(textView.beginningOfDocument, toPosition: textView.endOfDocument)
选择一系列文字
// Range: 3 to 7
let startPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 3)
let endPosition = textView.positionFromPosition(textView.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: 7)
if startPosition != nil && endPosition != nil {
textView.selectedTextRange = textView.textRangeFromPosition(startPosition!, toPosition: endPosition!)
}
在当前光标位置插入文本
textView.insertText("Hello")
笔记
-
此示例最初来自此 Stack Overflow 答案的改编。
-
这个答案使用文本字段,但相同的概念适用于
UITextView
。 -
使用
textView.becomeFirstResponder()
将焦点置于文本字段并使键盘显示。 -
有关如何在某个范围内获取文本,请参阅此答案 。
有关
- 如何在 Swift 中创建一个范围 (间接地解决为什么我们必须在这里使用
selectedTextRange
而不仅仅是selectedRange
)