2013-09-15 3 views
1

Можно ли добавить текстовую ссылку в TextView? Я хочу, чтобы ссылка могла вести себя как кнопка, где я могу назначить ей действие.Добавить текстовую ссылку на TextView

EDIT: Когда я говорю назначить действие, я имею в виду фактически что-то в коде. Мне интересно, можно ли динамически добавить «кнопку» в текст, для которого я могу назначить закодированное действие.

Живой сценарий

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

+1

что вы точно пытаетесь сделать? может быть, будет альтернативное и лучшее решение, о котором вы думаете ... –

+0

Это тоже возможно!Когда пользователь выполняет поиск, возможно, что в описании может появиться другой потенциальный термин поиска. Я хотел бы дать пользователю возможность использовать этот поисковый запрос, чтобы он выполнял этот поиск (вместо того, чтобы вводить термин). – muttley91

+1

у вас есть реальный сценарий? вы имели в виду, что поисковые данные будут присутствовать в UITextView, и если какое-то слово - imp, вы будете иметь его как UIButton, чтобы вы могли называть его действием ... правильно? Я думаю, что с реальным сценарием было бы лучше. –

ответ

0

В инспекторе перейдите на вкладку «Атрибуты текстового вида», затем убедитесь, что «Обнаружение ссылок» отмечен.

+0

См. Мое редактирование, мой вопрос был немного неясным. – muttley91

0

Да, вы можете. Добавьте URL-адрес в текстовое представление, затем откройте Инспектор атрибутов. Вы увидите опцию для обнаружения ссылок.

enter image description here

+2

Это полезно по другим причинам, на самом деле, спасибо. Однако я не имел в виду URL. Мне действительно нужна какая-то ссылка, на которую я могу назначить действие. – muttley91

+0

@rar oh okay, и простой 'UIButton' не сделал бы трюк для вас? – John

+0

Должен быть доступен в TextView при выполнении поиска. Он может показывать или не отображать ссылку на другой поиск. – muttley91

0

Я знаю путь, но много работы. Во-первых, у вас есть NSAttributedString, у вас есть отображение текстового представления. Во-вторых, укажите диапазон текста, который вы хотите быть кнопкой. В-третьих, назначьте распознаватель жестов к текстовому представлению и в методе, вызываемом распознавателем, вы будете использовать основной текст, чтобы определить, произошло ли нажатие на диапазон текста, который представляет кнопки.

Вот как вы используете основной текст: создайте наборщик фреймов с атрибутной строкой. Создайте кадр из рамки с формой квадрата, который представляет собой рамку текстового вида, вставка с заполнением текстового вида. Рамка позволит вам получить y истоков каждой строки в текстовом представлении, и, как только вы узнаете, в какой строке произошло нажатие, вы можете использовать эту строку, чтобы затем выяснить, какой именно символ был использован на этой строке, x смещение. Когда вы знаете индекс символов в строке, вы можете добавить его в начало диапазона строки и получить индекс символа в пределах всей строки. Затем вы можете проверить, находится ли он в пределах диапазона текста, который является вашей кнопкой. Если это так, вы можете вызвать метод для имитации поведения типа целевого действия.

Ive объяснил процесс, как это сделать, и указано, какие виды основных текстовых объектов вы будете нуждаться, плохо позволяют искать конкретные детали API:

https://developer.apple.com/library/mac/documentation/Carbon/Reference/CoreText_Framework_Ref/_index.html#//apple_ref/doc/uid/TP40005304

Вы также можете использовать мое ядро ​​ObjC text wrapper: https://github.com/mysterioustrousers/MYSCoreText

+0

Вау, я надеялся, что это было что-то более простое. Я посмотрю на это, но более вероятно, что я просто откажусь от идеи (по крайней мере пока). Это была более быстрая пользовательская функция, чем то, что я хотел потратить на добавленную массу. Спасибо за тщательный ответ! – muttley91

1

Я бы порекомендовал использовать NIAttributedLabel от Nimbus, библиотеки iOS с открытым исходным кодом. Вы можете указать диапазоны текста, которые являются ссылками, и вы получаете сообщения делегатов, отправленные, когда пользователь нажимает на него. сайт

Главная Nimbus: http://nimbuskit.info/

NIAttributedLabel документы: http://docs.nimbuskit.info/interface_n_i_attributed_label.html

+0

Это на самом деле довольно работоспособное решение. Библиотека Nimbus немного раздута (но вы можете вырезать все, кроме 'attributedlabel' и' core'). Благодарю. – devios1

0

насчет CoreText? Он может рисовать много видов текста.

Смежные вопросы