Есть ли способ создания пользовательских UIDataDetectorTypes? - PullRequest
1 голос
/ 01 марта 2010

Я пытаюсь создать функцию всплывающей подсказки, чтобы можно было нажимать на определенные слова в моем учебном приложении и показывать определение. Для всплывающей части я планирую использовать код из «AFInformationView», который предоставляет пузыри на iPhone.

Часть, с которой я борюсь, это как связать местоположение конкретного слова с пузырем. В настоящее время у меня есть текст на UILabel, который находится на пользовательском UITableCell. Поскольку я вычисляю высоту строки на лету с помощью:

[textToUse  sizeWithFont:[UIFont systemFontOfSize:FONT_SIZE] constrainedToSize:CGSizeMake(stop-start, 500)];

Я не уверен, какие будут координаты для конкретного слова. Я думал, что если бы я создал пользовательский DataDetectorType, это могло бы быть исправлением.

Если кто-то знает, как это сделать или у кого-то есть другие идеи, я был бы рад их услышать.

Спасибо

Andrew

Ответы [ 5 ]

1 голос
/ 12 марта 2010

Я не создавал пользовательские типы UIDataDetectorTypes, но Крейг Хокенберри сделал что-то подобное со своим TwitterrificTouch.

Он использует регулярные выражения для обнаружения ссылок и прочего. Я предоставляю его с моими ключевыми словами, и тогда они становятся неприменимыми. Он помещает кнопки поверх соответствующего текста на нижележащих надписях. Вы можете погуглить множество постов, в которых говорится о «размещении прозрачных кнопок поверх» различных вещей, но код Крейга - единственный пример / рабочий код, который я могу найти.

Вот ссылка: http://furbo.org/2008/10/07/fancy-uilabels/

0 голосов
/ 03 мая 2012

Если вам нужен пользовательский детектор данных, вы можете написать метод экстрактора, чтобы в основном исправлять ссылки с помощью NSregularExpression. Например

NSString regex = @ "(http | https | fb): // ((\ w) | ([0-9] *) | ([- | _]) ) + |"(\ /.); исправить все ссылки, включая URL-адреса Facebook внутри текста, например, fb: //friends.

Тогда вы можете использовать NSattributedString, чтобы пометить ссылки разными цветами и т. Д.

ThreeTwenty имеет замечательную библиотеку под названием TTTAttributedLabel, где вы можете назначать ссылки на определенные части текста. Я также прокручиваю довольно быстро, если вы используете его в таблицах

https://github.com/mattt/TTTAttributedLabel

0 голосов
/ 25 апреля 2012

UIWebViews может быть возможным подходом, но при прокрутке вы должны учитывать, что весь текст должен быть проанализирован, чтобы обнаружить слова. Вы можете использовать HTMl-теги, чтобы сделать их синими и предоставить ссылки. Но как я мог тогда назначить пользовательское поведение? затем открытие в сафари?

0 голосов
/ 01 марта 2010

AFAIK, вы не можете создавать собственные детекторы данных.

Лучшим подходом для такого рода вещей является использование UIWebViews. По крайней мере, так я и сделал. Однако вы не должны использовать UIWebView внутри UITableViewCell. Фактически, никакое подпредставление UITableViewCell не должно отвечать на пользовательский ввод. Поэтому я думаю, что наилучшим подходом будет отображение UIWebView при нажатии на ячейку.

0 голосов
/ 01 марта 2010

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

Подайте запрос на добавление функции в свой баг-трекер. Я сделаю то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...