Вопрос

Есть ли способ запретить пользователю перемещать курсор в UITextField?Я бы хотел, чтобы он оставался в конце строки.

Это было полезно?

Решение

Нет никакого способа помешать им перемещать курсор.Однако вы можете запретить им редактировать текст, кроме как в конце, внедрив

– textField:shouldChangeCharactersInRange:replacementString:

метод в делегате вашего текстового поля.

Редактировать:вы также можете установить userInteractionEnabled Для NO чтобы пользователь не мог прикоснуться к полю.Позвонить becomeFirstResponder вручную, чтобы поле получило фокус, поскольку пользователь не может нажать, чтобы сфокусироваться.

Другие советы

Это старый вопрос, но я искал ответ на тот же вопрос и нашел решение.

На самом деле довольно просто запретить пользователю перемещать курсор.Просто создайте подкласс UITextField и предоставьте следующую реализацию caretRectForPosition:

- (CGRect)caretRectForPosition:(UITextPosition *)position
{
    return [super caretRectForPosition:self.endOfDocument];
}

ПОДКЛАСС не требуется.

Вы могли бы использовать UITextFieldDelegate.Это заставит отключить увеличительное стекло и выделение текста.

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {
    textField.userInteractionEnabled = NO;
    return YES;
}

- (void)textFieldDidEndEditing:(UITextField *)textField {
    textField.userInteractionEnabled = YES;
}

ПРИМЕЧАНИЕ:Это всего лишь обходной маневр.

Я бы предложил проверить Распознаватели жестов собственность.

Вы найдете их много в массиве и, возможно, захотите либо удалить их все, либо найти те, которые запускают событие, которое вы хотите перехватить, и удалить / заменить его.

Я использовал его для удаления функций копирования / вставки и увеличительного стекла из UITextField

Я не проверял, можете ли вы отключить увеличительное стекло, но рекомендуемый способ выборочно отключить поведение редактирования в UIResponder (и, следовательно, в UITextField) - реализовать canPerformAction:withSender из UIResponder.

Видишь Документация пользовательского интерфейса.

Возможно, если вы вернете "НЕТ" для действия select и selectAll, вы сможете отключить его.

Другой, более жестокий способ - перехватывать любое событие касания и сбрасывать курсор до конца.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top