У меня есть UITextField
, что я форсирую форматирование, изменяя текст внутри обработчика уведомлений об изменении. Это отлично работает (как только я решил проблемы с реентерацией), но оставил мне еще одну неприятную проблему. Если пользователь перемещает курсор в другое место, отличное от конца строки, мое изменение форматирования перемещает его в конец строки. Это означает, что пользователи не могут вставлять более одного символа за раз в середину текстового поля. Есть ли способ запомнить, а затем сбросить позицию курсора в UITextField
?Позиция курсора в UITextField
ответ
Я не думаю, что есть способ разместить курсор в определенном месте в вашем UITextField
(если вы не очень сложны и не имитировали событие касания). Вместо этого я бы обработал форматирование, когда у пользователя закончил, отредактировав их текст (в textFieldShouldEndEditing:
), и если их запись неверна, не разрешайте текстовому полю завершить редактирование.
Я подумал об этом, но то, что я реализую, похоже на то, как вы вводите числа в банкомате. Десятичная цифра всегда есть, и когда вы вводите числа, они перемещаются влево, поэтому сначала вводятся результаты 1-0-5-0 в 0,01, затем 0,10, 1,05, 10,50. Чтобы сделать это в конце, вы получите 1050 в поле, а затем измените его на 10.50, что довольно смущает пользователя. – Jeremy
Я, наконец, нашел решение этой проблемы! Вы можете поместить текст, который нужно вставить в системный картоне, а затем вставьте его в текущую позицию курсора:
[myTextField paste:self]
Я нашел решение на блоге этого человека:
http://dev.ragfield.com/2009/09/insert-text-at-current-cursor-location.html
Функциональность паста OS V3.0, но я протестировал его, и он отлично подходит для меня с пользовательской клавиатурой.
Если вы идете на это решение, вы должны, вероятно, сохранить существующее содержимое буфера обмена пользователя и немедленно восстановить его.
Управление позицией курсора в UITextField является сложным, потому что столько абстракций связано с полями ввода и вычислением позиций. Однако это, безусловно, возможно. Вы можете использовать функцию-член setSelectedTextRange
:
[input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];
Вот функция, которая принимает ряд и выбирает тексты в этом диапазоне. Если вы просто хотите, чтобы поместить курсор в определенный индекс, просто использовать диапазон с длиной 0:
+ (void)selectTextForInput:(UITextField *)input atRange:(NSRange)range {
UITextPosition *start = [input positionFromPosition:[input beginningOfDocument]
offset:range.location];
UITextPosition *end = [input positionFromPosition:start
offset:range.length];
[input setSelectedTextRange:[input textRangeFromPosition:start toPosition:end]];
}
Например, чтобы поместить курсор на idx
в UITextField input
:
[Helpers selectTextForInput:input
atRange:NSMakeRange(idx, 0)];
Молодцы. это работает для меня и является гибким. – LostInTheTrees
Общая идея в порядке, но этот код хочет находиться в категории на NSTextField, например здесь: https://github.com/MaxZeng/UITextField-SelectedRange/blob/master/UITextFieldSelectedRange/UITextField%2BSelection.m – osxdirk
Извините, но он не работает, курсор остается в конце ... iOS 8.0 здесь. –
Здесь отрывок, который прекрасно работает для этой проблемы:
- (void)textFieldDidBeginEditing:(UITextField *)textField{
UITextPosition *positionBeginning = [textField beginningOfDocument];
UITextRange *textRange =[textField textRangeFromPosition:positionBeginning
toPosition:positionBeginning];
[textField setSelectedTextRange:textRange];
}
Вот быстрая версия @Chris R.- обновлялись Swift3
private func selectTextForInput(input: UITextField, range: NSRange) {
let start: UITextPosition = input.position(from: input.beginningOfDocument, offset: range.location)!
let end: UITextPosition = input.position(from: start, offset: range.length)!
input.selectedTextRange = input.textRange(from: start, to: end)
}
Не стесняйтесь использовать эту UITextField
категорию, чтобы получить и установить позицию курсора:
@interface UITextField (CursorPosition)
@property (nonatomic) NSInteger cursorPosition;
@end
-
@implementation UITextField (CursorPosition)
- (NSInteger)cursorPosition
{
UITextRange *selectedRange = self.selectedTextRange;
UITextPosition *textPosition = selectedRange.start;
return [self offsetFromPosition:self.beginningOfDocument toPosition:textPosition];
}
- (void)setCursorPosition:(NSInteger)position
{
UITextPosition *textPosition = [self positionFromPosition:self.beginningOfDocument offset:position];
[self setSelectedTextRange:[self textRangeFromPosition:textPosition toPosition:textPosition]];
}
@end
Полезная на позицию в индексе (Swift 3)
private func setCursorPosition(input: UITextField, position: Int) {
let position = input.position(from: input.beginningOfDocument, offset: position)!
input.selectedTextRange = input.textRange(from: position, to: position)
}
- 1. Позиция курсора
- 2. Местоположение курсора в uitextfield
- 3. Быстрая позиция значка UITextField
- 4. Позиция rightView UITextField
- 5. Перемещение курсора UITextfield
- 6. Позиция курсора, jQuery
- 7. Позиция курсора EditText
- 8. Javascript позиция курсора изображения
- 9. Позиция курсора EditText
- 10. Перемещение курсора в начало UITextField
- 11. Изменить цвет курсора в UITextField
- 12. Scala Качели Позиция курсора
- 13. java.sql.SQLException: Неверная позиция курсора
- 14. События и позиция курсора
- 15. Позиция удаления курсора
- 16. Позиция курсора мыши в Javascript?
- 17. Позиция курсора/выбора в DateTimePicker
- 18. Пиксельная позиция курсора в UITextView
- 19. позиция курсора в пользовательской функции
- 20. jQuery Set Позиция мыши (не позиция курсора)
- 21. Python 3.5.1 Вход + позиция курсора/курсора
- 22. Как определить положение курсора UITextField?
- 23. позиция курсора при обновлении страницы
- 24. Пользовательская позиция клавиатуры для курсора
- 25. Windows Forms RichTextBox позиция курсора
- 26. JavaScript setSelectionRange() и позиция курсора
- 27. Emacs: позиция курсора внутри скобки
- 28. VB Script Set Позиция курсора
- 29. SWT позиция курсора на холсте
- 30. Позиция курсора/курсора внутри вновь добавленного пролета в крошечном mce
Быстрый ответ о получении и установке положения курсора и вставке текста. http://stackoverflow.com/a/34922332/3681880 – Suragch