У меня есть UITextView
с текстом. Мне нужно получить точное значение диапазона символа/строки из выбранного местоположения. Я установил TapGestureRecognizer
для UITextView. В своем методе действия мне нужно получить диапазон нажатого местоположения. Как это возможно? Я протестировал некоторые ответы из Stackoverflow, но они не были идеальными. Заранее спасибо.
Как получить значение диапазона текста в UITextView из места касания?
Ответы (1)
Вы смотрели документацию UITextView
?
Вы можете использовать этот метод selectedRange
для определения диапазона текста, выбранного пользователем.
Позднее редактирование: за это совсем недавно проголосовали против, и это дало мне возможность перечитать свой ответ, и я бы тоже проголосовал за свой ответ трехлетней давности.
Обновленный ответ:
Если есть одно касание, само действие касания должно содержать необходимую вам информацию. По сути, здесь вам понадобятся сами события UITouch, например, чтобы вычислить, где произошло прикосновение по отношению к тому, где должен быть ваш текст. Это позволит вам узнать, какая часть текста была закрыта пальцем пользователя.
Честно говоря, я не уверен, что для этого существуют какие-либо сторонние решения, но могу поспорить, что cocoapods.org будет хорошее место для начала с ключевого слова UITextView tap
, если не сам Github с ключевыми словами: cocoapod uitextview
.
Если бы я реализовывал такое решение с событиями UITouch, используя свойства, описанные в docs Я бы использовал The location of the touch within the view or window
, заданный классом.
Манипулируя одной рукой CGPoints
из: https://developer.apple.com/documentation/uikit/uitouch/1618116-location, вы можете использовать механизмы String для определения размера текста в заданном шрифте.
Хотя это решение предназначено для UILabel
, оно может:
(a) использоваться по-другому, но, надеюсь, точно так же в UITextView
OR
(b) Я видел, как манекен UILabel
использовался просто для расчета размеров текста в функциях, требующих такой точности. Обычно это довольно эффективно, так как изменение строки UILabel
не требует больших затрат, а UILabel
имеет встроенные свойства для расчета размера на основе текста и шрифта без необходимости выполнения прохода макета.
Опять же, извиняюсь, если первый оригинальный ответ показался дерзким, теперь он действительно выглядит так, как я вижу. Однако я подтвержу, что мой первоначальный ответ остается в силе (механизм selectedRange
) СЛЕДУЕТ, чтобы желаемое решение было в виде длительного нажатия. Тем не менее, для пользовательского решения, основанного на одном событии касания, сбор UITouch
событий с помощью обратного вызова делегата, а затем обработка тех, кто знает, что String
присутствует, является лучшим подходом, насколько я могу судить.