Отключить увеличительное стекло в UITextField
-
21-08-2019 - |
Вопрос
Есть ли способ запретить пользователю перемещать курсор в 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, вы сможете отключить его.
Другой, более жестокий способ - перехватывать любое событие касания и сбрасывать курсор до конца.