即時通訊在我的控制器中使用自定義鍵盤。但如何獲得uitextfiled中的光標位置。我的要求是在文本框的所需位置輸入文字。可能嗎?uitextfield中的光標位置
回答
答案是,您無法獲得當前光標位置以進行可以使用文本字段進行的所有類型的編輯。您可以使用[textField粘貼]在光標處插入字符,但是用戶可以移動光標,選擇和修改文本,而無需在遊標結束的位置獲取通知。
您可以臨時粘貼一個特殊字符並在字符串中搜索其位置,將其刪除,然後添加您想要的字符。
從iOS 5開始,'UITextField'符合'UITextInput'協議,所以使用它的'replaceRange:withText:'方法並結合獲得'selectedTextRange'將是更好的解決方案。 – omz 2013-01-30 00:21:31
讓我們假設你的代碼是在一個對象上的方法,其中self.textField
是所討論的UITextField。
您可以找到光標/選擇與當前位置:
NSRange range = self.textField.selectedTextRange;
如果用戶沒有選擇文本range.length
將是0,這表明它僅僅是一個光標。不幸的是,這個屬性看起來並不符合KVO,所以當它發生變化時沒有有效的方式來通知,但是這不應該成爲你的情況的問題,因爲當你響應用戶與用戶的交互時,你可能真的只關心它您的自定義鍵盤。
然後您可以使用(假設newText
持有來自您的自定義鍵盤的輸入)。
[self.textField replaceRange:range withText:newText];
如果您需要隨後調整光標/選擇,你可以使用:
self.textField.selectedTextRange = newRange;
例如,您可能希望你插入的文本後,光標位置。
UPDATE:
在我原來的答案,我沒有注意到,我利用我已經加入到UITextView
類別:
- (void)setSelectedRange:(NSRange)selectedRange
{
UITextPosition* from = [self positionFromPosition:self.beginningOfDocument offset:selectedRange.location];
UITextPosition* to = [self positionFromPosition:from offset:selectedRange.length];
self.selectedTextRange = [self textRangeFromPosition:from toPosition:to];
}
- (NSRange)selectedRange
{
UITextRange* range = self.selectedTextRange;
NSInteger location = [self offsetFromPosition:self.beginningOfDocument toPosition:range.start];
NSInteger length = [self offsetFromPosition:range.start toPosition:range.end];
NSAssert(location >= 0, @"Location is valid.");
NSAssert(length >= 0, @"Length is valid.");
return NSMakeRange(location, length);
}
然後更換,而不是self.textField.selectedTextRange
使用self.textField.selectedRange
並繼續爲我描述。
感謝omz指出我的錯誤。
當然,你可以直接與UITextRange
工作,但至少在我的情況下,這證明是相當不合理的。
斯威夫特
獲取光標所在位置:
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: selectedRange.start)
}
在一些任意位置輸入文字:
let arbitraryValue: Int = 5
if let newPosition = textField.positionFromPosition(textField.beginningOfDocument, inDirection: UITextLayoutDirection.Right, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRangeFromPosition(newPosition, toPosition: newPosition)
textField.insertText("Hello")
}
我完全的答案是here。
- 1. 在UITextField中設置光標位置(Monotouch)
- 2. 控制在UITextField中的光標位置
- 3. 如何確定UITextField的光標位置?
- 4. UITextField secureEntry錯位光標
- 5. 在Swift中獲取和設置UITextField和UITextView的光標位置
- 6. 設置UITextField的光標位置不工作(swift)
- 7. UITextField將光標設置爲開始文本位置
- 8. 光標位置
- 9. EditText中的光標位置
- 10. 光標和光標的鎖定位置
- 11. UITextField禁用光標
- 12. UITextfield光標移動
- 13. Swift UITextField圖標位置
- 14. iOS 6:UITextField textAlignment不會改變光標位置
- 15. 對光標位置
- 16. 光標位置,jquery
- 17. EditText光標位置
- 18. 在光標位置
- 19. 鼠標光標在Javascript中的位置?
- 20. 夫特的UITextField圖標位置設置
- 21. UITextField開始處的光標
- 22. 如何獲取TextInput中的光標位置和光標位置後的內容?
- 23. 從鼠標光標位置
- 24. VIM設置光標位置
- 25. 設置光標位置
- 26. 設置光標位置
- 27. 設置光標位置
- 28. WPF中的RichTextBox中的光標位置
- 29. 當光標位於uitextfield的角落時,在UItextfield中滾動文本
- 30. Vim的光標位置
可能重複http://stackoverflow.com/questions/1317929/insert-string-at-cursor-position-of-uitextfield – kennytm 2010-05-06 05:49:32
沒有即時消息不問小數點。 – Allen 2010-05-06 06:07:54
您可能不會詢問小數點,但您提出的問題是「如何在文本字段中的特定點處插入文本」。 KennyTM鏈接的問題包含一個非常好的和有用的解決方案。看一看。 – Jasarien 2010-08-23 12:14:18