Как вставить значение ключа в UITextView с пользовательской клавиатуры в iOS - PullRequest
1 голос
/ 25 января 2011

Я создаю виртуальную клавиатуру для UITextView. Все работает хорошо, я могу отобразить клавиатуру и удалить клавиатуру, а также отображать нажатия клавиш. Я использую метод "stringByReplacingCharactersInRange: withString", чтобы поместить новое нажатие клавиши в текстовое представление. Это работает, но так как он заменяет строку каждый раз, точка входа переходит в конец строки. Это все имеет смысл, но не очень удобно. Я могу исправить это, выполнив проверки в моем коде, но может быть что-то лучше ...

Итак, мой вопрос таков; Есть ли способ вставить новый ключ в UITextView напрямую, не изменяя строку текстового свойства UITextView вручную? В руководстве говорится, что мне придется управлять целью / действием самостоятельно, но мне было интересно, пропустил ли я действие для вызова. Кажется, что клавиатура Apple Default должна иметь плавный способ нажатия клавиши на объекте без очевидного количества проверок, которые я должен буду сделать, чтобы набрать текст гладко.

Любая помощь будет принята с благодарностью. Спасибо, Rob

1 Ответ

1 голос
/ 03 февраля 2011

Ну, я не получил никаких ответов. Поэтому я нашел способ сделать это так, чтобы он был разумным и простым. Это вопрос отслеживания выбранного диапазона. Поэтому, когда я хочу Backspace, я использую эту технику.

NSRange currentRange = self.myTextView.selectedRange;
if (currentRange.length == 0) {
    currentRange.location--;
    currentRange.length++;
}
self.myTextView.text = [self.myTextView.text stringByReplacingCharactersInRange:currentRange withString:[NSString string]];
currentRange.length = 0;
self.myTextView.selectedRange = currentRange;

Если мне нужно ввести символ, это работает.

NSRange currentRange = self.myTextView.selectedRange;
self.myTextView.text = [self.myTextView.text stringByReplacingCharactersInRange:currentRange withString:someCharacter];
currentRange.location++;
currentRange.length = 0;
self.myTextView.selectedRange = currentRange;

Если у кого-то есть способ получше, я бы хотел его услышать.

Спасибо
Rob

...