2012-01-17 129 views
26

我的iPhone應用程序中有一個可編輯的UITextView。如何設置光標在UITextView中的位置

每當用戶選擇特定功能時,都會在UITextView內部創建新按鈕。

由於按鈕總是放在文本視圖的左側,因此我需要將光標放在按鈕的右側,以便用戶可以看到他們正在輸入的內容。 我似乎無法找到記錄(或未記錄)的方法來設置遊標的位置。

有沒有人有任何想法或有任何其他人取得類似的東西?

+0

你能張貼解釋你想要做什麼的圖像? – 2012-01-17 07:41:22

+0

我想發佈它,但即時新在這裏。不超過10的聲望不允許發佈圖像。 zzz – GURU 2012-01-17 08:27:18

回答

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

設置到的selectedRange用0長度的位置,你可能也想TextView的可編輯這樣也設置爲YES。

+0

我試過這個,但還是不行。 – GURU 2012-01-17 07:53:20

3

更改selectedRange您的textView。例如,將光標在第3位:

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

在你的情況下,加在TextView的內容可能有助於一些空間。和觀察者textview 's textDidChanged event以防止這些空間被用戶刪除。

+0

我在textViewDidBeginEditing中插入了這段代碼,但它不起作用。文本視圖中光標的位置仍然在左側。 – GURU 2012-01-17 07:49:30

+0

在你的textView裏沒有內容?在設置光標位置之前添加一些空格。 – xhan 2012-01-17 07:58:31

50

我知道這是非常晚,但我想我可以幫助人們堅持在這個(如我)。

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

謝謝,你幫了我! – Guerrix 2013-03-28 18:27:30

+0

:)沒問題!樂意效勞! – Cashew 2013-03-28 22:26:48

+0

非常感謝! - 完美的答案。 – 2014-03-27 14:33:27

15

嘗試是這樣的:

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

這將導致selectedRange在下一個runloop開始時在主線程上執行。

+2

完美無暇! +1 – 2015-09-08 03:17:15

+0

第一次爲我工作! +1 – 2017-01-27 11:16:33

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

+0

問題不是佔位符。無所謂的答案 – 2016-08-11 09:44:54

0

我用下面去TextView的開始時,使用斯威夫特4

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