iOS, связанная с невозможностью установить позицию курсора в UITextField

Я работаю над приложением, которое будет использовать пользовательскую клавиатуру для ввода текста. На клавиатуре должны быть клавиши «вперед» и «назад».

Некоторая охота на SO предполагает, что невозможно программно установить позицию курсора в UITextField.

Вместо этого я рассмотрел использование UITextView. Это позволяет установить положение курсора. Но поведение прокрутки становится чрезвычайно раздражающим.

Мне интересно, знает ли кто-нибудь о хорошем обходном пути. По сути, мне нужно что-то с текстом и курсором, и я могу программно установить положение курсора.

РЕДАКТИРОВАТЬ: Интересно, что если у меня есть UITextField в симуляторе, и я нажимаю клавишу со стрелкой вперед или назад на клавиатуре Mac, курсор перемещается вперед или назад. Однако я не вижу способа имитировать это поведение на устройстве. . . или, если уж на то пошло, щелчком мыши на экране симулятора.


person William Jockusch    schedule 04.01.2011    source источник


Ответы (2)


Я также использую UITextView именно для того, чтобы установить позицию курсора.

Если вы подклассируете UITextView (который сам является специализацией UIScrollView), вы можете переопределить «scrollingEnabled» и вернуть NO:

- (BOOL) scrollingEnabled   
{
    return NO;
}

Мне также пришлось поиграть со свойствами contentInset и contentOffset, чтобы получить именно то, что я хотел.

person TomSwift    schedule 04.01.2011
comment
даже если я установил self.scrollEnabled=NO при инициализации и переопределил isScrollEnabled, чтобы всегда возвращать NO, он все равно может прокручиваться вверх при выборе. (Может зависеть от размера шрифта относительно размера представления.) - person William Jockusch; 04.01.2011
comment
Извините; ты прав. У меня был мертвый код в моем проекте. Я устанавливаю для scrollEnabled значение NO, и мне нужно настроить размер представления и отследить ввод в поле, чтобы избежать полной прокрутки. - person TomSwift; 04.01.2011
comment
Я принимаю это, потому что это правильный путь. Но я думаю, что лучший способ отключить прокрутку — использовать пустую реализацию scrollToRectVisible. - person William Jockusch; 05.01.2011
comment
Что вы сделали с contentInset и contentOffset? Я играл с contentInset, чтобы попытаться сопоставить UITextField. Пока ясно, что правильный ответ зависит от размера шрифта, но я не понимаю взаимосвязи. - person William Jockusch; 06.01.2011

Принятый ответ был правильным в то время, но сейчас устарел. В iOS 5 UITextField соответствует протоколу UITextInput. Таким образом, положение курсора можно установить с помощью свойства selectedTextRange.

person William Jockusch    schedule 09.05.2012