(iPhone) selectedRange для нередактируемого UITextView (или других методов обработки кликов?)

Я использую UITextView для хранения статического содержимого (на китайском языке это означает, что все символы имеют фиксированную ширину). Я хочу позволить пользователям нажимать на символ в тексте и выводить словарную информацию для этого символа. Я знаю все проблемы, связанные с отсутствием копирования и вставки, и все такое, но я надеюсь, что найдется способ сделать это, не дожидаясь прошивки iPhone 3.0.

Сначала я подумал об использовании UITextViews selectedIndex имущество. К сожалению, когда UITextView не редактируется, следующий код в UITextViewвсегда возвращает длину всего текстового блока:

NSRange touchPoint = self.selectedRange;
NSLog(@"Selection: %d", touchPoint.location);

Это имеет смысл, я полагаю, как и в случае нередактируемого UITextView нет способа выбрать точку вставки, но это мне не поможет.:)

Другой подход заключается в том, чтобы рассчитать, используя тот факт, что текст на китайском языке имеет фиксированную ширину, где клик приземлился и какой текст должен находиться под этим местоположением в данный момент, но это усложняется пунктуацией, которая может привести к раннему переносу строки, в результате чего предшествующие символы вниз по строке.

Есть ли другой способ узнать, какой текст находится под сенсорным событием, которое я пропускаю?

1 ответ

Решение

Позвоните по следующему, прежде чем просить selectedRange:

[[textView webView] updateSelectionWithPoint:point];

Примечание: оба -webView а также -updateSelectionWithPoint: являются частными API. Вы можете также выполнить эквивалентное поведение, переключая редактируемый режим, становясь первым респондентом и отправляя поддельные события касания, но это было бы гораздо больше работы

Другие вопросы по тегам