2017-06-15 44 views
1

我正在研究高度依赖于UITextView的应用程序。我的理想行为是,当用户快速按下双空格时,文本光标会向前跳5个空格,为UIButton留出空间。我已经实现了下面的代码,但即使“quickSpace”区域中的所有其他操作都发生,光标也不会跳转。任何人都知道我在做什么错了?无法在UITextView中设置光标位置

更新:我认为问题在于我试图将光标跳到当前存在范围之外的某个点。换句话说,有人正在向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

设置TextView范围像这样在主队列中。

DispatchQueue.main.async { 
     mainTextBox.isEditable = true 
     mainTextBox.selectedRange = NSMakeRange(2, 0) 
    } 
+0

那该去哪里? –

+0

之后你需要把这个代码添加到TextView中 – Bala