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

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

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

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

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

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

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


person John Biesnecker    schedule 21.03.2009    source источник


Ответы (1)


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

[[textView webView] updateSelectionWithPoint:point];

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

person rpetrich    schedule 21.03.2009
comment
Просто попробовал. Прекрасно работает, если UITextView доступен для редактирования (не нужно удерживать касание, пока не появится лупа и т. Д.), Но по-прежнему возвращает длину текста, когда UITextView становится недоступным для редактирования. Позже придется попробовать более длинную версию фейкового события. - person John Biesnecker; 21.03.2009
comment
Возможно, сработает установка редактируемого до и после. Конечно, если вы просто показываете открытый текст, лучшим способом было бы просто использовать настраиваемое представление, которое рисует текст вручную, и у вас будет полный контроль. - person rpetrich; 21.03.2009