Перемещение курсора UITextField

Я хочу предотвратить перемещение курсора в UITextField . или мне нужно предотвратить ввод текста между двумя символами, которые уже введены. Как я могу это сделать?

1
nl ja de

3 ответы

Нет свойства или метода, чтобы пользователь не мог использовать увеличительное стекло в определенном текстовом поле. Вы можете попытаться заблокировать все символы внутри строки:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    if(range.location < textField.text.length) return NO; else return YES;
}

После некоторых исследований я нашел этот вопрос: Отключить увеличительное стекло в UITextField . Автор принятого ответа говорит, что есть способ сделать это:

Вы также можете установить userInteractionEnabled в NO, чтобы пользователь не мог   коснитесь поля. Вызовите функцию startFirstResponder вручную, чтобы поле   получает фокус, так как пользователь не может нажать, чтобы сфокусироваться.

Но, как я выяснил, это не сработает, поскольку setUserInteractionEnabled: NO препятствует тому, чтобы текстовое поле стало первым ответчиком. После второго исследования я нашел еще один вопрос: Показать клавиатуру UITextField на firstResponder даже когда userInteractionEnabled = NO . Пользователь MaxGabriel утверждает, что нашел способ сделать это:

Что я делаю, это добавить скрытое текстовое поле в представление и вызвать   на нем будет FirstResponder. Пользователь не имеет понятия об этом текстовом поле   существует. В обратном вызове делегата из текстового поля я беру текст   пользователь ввел и добавил его в UITextView (хотя вы могли бы добавить   текст, который вы хотели, например UITextField, как в вашем   вопрос). Я отключу userInteractionEnabled для видимого текста   Посмотреть. Это создает желаемый эффект.

Stack Overflow - это огромная база данных, немного исследований, прежде чем задавать вопрос, может помочь вам в будущем.

1
добавлено
ваше решение - отличный старт, но будьте осторожны, потому что это не позволит пользователю удалять из конца строки.
добавлено автор atreat, источник

Чтобы остановить ввод текста в UiTextField, вы должны использовать метод делегата uitextfield

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
//Set tag for a textfield
    if(textField.tag==10)
    {
        NSUInteger newLength = [textField.text length] + [string length] - range.length;
        return (newLength < [textField.text length]) ? NO : YES;
    }
}

Измените логику согласно вашему требованию. Для предотвращения ввода текста между двумя символами Используйте текст NSRange и текст поля диапазона меньше длины текстового поля, а затем возвращайте Нет, тогда текст не будет введен в UITextField

0
добавлено

Вы не можете запретить перемещение каретки, но вы можете использовать метод UITextFieldDelegate textField: shouldChangeCharactersInRange: replacementString: для тестирования, если текст был введен внутри уже введенной строки, если это не изменение текст в текстовом поле вручную и переместите курсор в конец с помощью свойства selectedTextRange протокола UITextInput .

0
добавлено
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.