无法在UITextView

时间:2017-06-15 03:50:26

标签: ios swift cursor uitextview

我正在开发一款高度依赖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
    }

1 个答案:

答案 0 :(得分:0)

在主队列中设置TextView范围。

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