Перемещение курсора в начало UITextField
Есть ли способ сделать курсор в начале UITextField?
Когда я отображаю элемент управления с содержимым, курсор помещается в конец строки. Я хотел бы перенести это в начало.
3 ответа
UITextField
соответствует UITextInput
протокол, который предоставляет методы, которые позволяют вам контролировать выбранный диапазон. Это работает в моем тестировании:
-(void)textFieldDidBeginEditing:(UITextField *)textField {
textField.selectedTextRange = [textField
textRangeFromPosition:textField.beginningOfDocument
toPosition:textField.beginningOfDocument];
}
Вы боретесь с системой на этом. UITextField
не имеет общедоступных свойств для установки позиции курсора (что фактически соответствует началу текущего выделения). Если вы можете использовать UITextView
вместо этого следующие методы-делегаты будут приводить курсор к началу текста. Просто имейте в виду, что пользователи не ожидают такого поведения, и вы должны дважды проверить свои мотивы для желания сделать это.
- (void)textViewDidBeginEditing:(UITextView *)textView {
shouldMoveCursor = YES;
}
- (void)textViewDidChangeSelection:(UITextView *)textView {
if(shouldMoveCursor)
{
NSRange beginningRange = NSMakeRange(0, 0);
NSRange currentRange = [textView selectedRange];
if(!NSEqualRanges(beginningRange, currentRange))
[textView setSelectedRange:beginningRange];
shouldMoveCursor = NO;
}
}
куда shouldMoveCursor
это BOOL
переменная, которую вы поддерживаете в вашем контроллере.
Работает для меня
// Get current selected range , this example assumes is an insertion point or empty selection
UITextRange *selectedRange = [textField selectedTextRange];
// Calculate the new position, - for left and + for right
UITextPosition *newPosition = [textField positionFromPosition:selectedRange.start offset:3];
// Construct a new range using the object that adopts the UITextInput, our textfield
UITextRange *newRange = [textField textRangeFromPosition:newPosition toPosition:newPosition];
// Set new range
[textField setSelectedTextRange:newRange];