如何在UITextView中设置光标的位置

时间:2012-01-17 07:34:10

标签: ios objective-c iphone uitextview

我的iPhone应用程序中有一个可编辑的UITextView。

只要用户选择特定功能,就会在UITextView内创建新按钮。

由于按钮始终位于文本视图的左侧,我需要将光标放在按钮的右侧,以便用户可以看到他们正在键入的内容。 我似乎无法找到一个记录(或未记录)的方法来设置光标的位置。

有没有人有任何想法或有其他人取得过类似的东西?

6 个答案:

答案 0 :(得分:52)

我知道这已经很晚了,但我想我可以帮助那些陷入困境的人(像我一样)。

performSelector:withObject:afterDelay似乎工作正常(其他答案因某些奇怪的原因而无效):

- (void)textViewDidBeginEditing:(UITextView *)inView 
{ 
[self performSelector:@selector(setCursorToBeginning:) withObject:inView afterDelay:0.01]; 
} 

- (void)setCursorToBeginning:(UITextView *)inView 
{ 
//you can change first parameter in NSMakeRange to wherever you want the cursor to move
inView.selectedRange = NSMakeRange(3, 0); 
} 

来源:http://puppenspieler.tumblr.com/post/757819650/set-selectedrange-in-a-uitextview

答案 1 :(得分:21)

textView.editable = YES;
textView.selectedRange = NSMakeRange(2, 0);

将selectedRange设置为长度为0的位置,您可能还希望textView可编辑,因此也将其设置为YES。

答案 2 :(得分:17)

尝试这样的事情:

dispatch_async(dispatch_get_main_queue(), ^{
    inView.selectedRange = NSMakeRange(3, 0);
});

这将导致selectedRange在下一个runloop开头的主线程上执行。

答案 3 :(得分:5)

我使用以下内容到达textView的开头,使用 Swift 4

DispatchQueue.main.async {
    self.selectedTextRange = self.textRange(from: self.beginningOfDocument, to: self.beginningOfDocument)
}

答案 4 :(得分:3)

更改textView的selectedRange。例如,将光标放在位置3:

[textView setSelectedRange:NSMakeRange(3, 0)];

在您的情况下,在textView内容上添加一些空格可能会有所帮助。和观察者textview 's textDidChanged event以防止这些空间被用户删除。

答案 5 :(得分:0)

如果你想让Texview占位符是必需的或像我一样可选。看我的黑客

 func textViewDidBeginEditing(textView: UITextView) {
        if textView.text.isEmpty {
          if self.text == "Required" || self.text == "Optional" {
            dispatch_async(dispatch_get_main_queue(), {
              textView.selectedRange = NSMakeRange(0, 0)
            });
          }
        }
      }

      func textViewDidEndEditing(textView: UITextView) {
        if CommonUtils.isEmptyString(textView.text) {
          if required {
            textView.text = "Required"
          } else {
            textView.text = "Optional"
          }
          textView.textColor = grayColor//
        }
      }

      func textViewDidChange(textView: UITextView) {
        if textView.text.isEmpty {
          if required {
            textView.text = "Required"
          } else {
            textView.text = "Optional"
          }
          textView.textColor = grayColor
          textView.selectedRange = NSMakeRange(0, 0)
        } else {
          if required {
            if textView.text.length > "Required".length {
              textView.text = self.text.replace("Required", withString: "")
            }
          } else {
            if textView.text.length > "Optional".length {
              textView.text = self.text.replace("Optional", withString: "")
            }
          }
          textView.textColor = blackColor//
        }
      }

别忘了注册委托:UITextViewDelegate