(iPhone) selectedRange для нередактируемого UITextView (или других методов обработки кликов?) - PullRequest
2 голосов
/ 21 марта 2009

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

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

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

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

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

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

1 Ответ

2 голосов
/ 21 марта 2009

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

[[textView webView] updateSelectionWithPoint:point];

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

...