我正在开发一款高度依赖UITextView的应用。我理想的行为是当用户快速按下双倍空格时,文本光标将向前跳5个空格以为UIButton腾出空间。我已经实现了以下代码,但即使“quickSpace”区域中的所有其他操作都发生,光标似乎也没有跳转。谁知道我做错了什么?
更新:我认为问题是我试图将光标跳到当前存在范围之外的点。换句话说,有人在UITextView中输入新文本,范围设置为光标所在的位置。这是范围的结束吗?是否可以将光标发送到当前存在的范围之外?
if(text==" "){
let now=Date()
if let last=previousSpaceTimestamp
{
if now.timeIntervalSince(last)<0.3
{
//mainTextBox.text=textView.text.appending("hello")
isQuickSpace=true
var checkOffButton: UIButton=createCheckButton()
checkOffButton.backgroundColor=UIColor.green
checkOffButton.frame.size=CGSize(width: 20, height: 20)
//checkOffButton.frame.offsetBy(dx: 0, dy: CGFloat(buttonYPos))
mainTextBox.addSubview(checkOffButton)
buttonYPos=buttonYPos+15
if let currentRange=mainTextBox.selectedTextRange
{
if let newPosition=mainTextBox.position(from: currentRange.start,
offset: 200)
{
mainTextBox.selectedTextRange=mainTextBox.textRange(from: newPosition,
to: newPosition)
}
}
return false
}
}
previousSpaceTimestamp=now
}
else
{
previousSpaceTimestamp=nil
}
return true
}
答案 0 :(得分:0)
在主队列中设置TextView范围。
DispatchQueue.main.async {
mainTextBox.isEditable = true
mainTextBox.selectedRange = NSMakeRange(2, 0)
}