Лучший подход для простой ссылки в UITextView - PullRequest
2 голосов
/ 20 августа 2009

Я создаю приложение для поиска по словарю. Пользователь выбирает слово из UITableView, и приложение отображает определение. В некоторых случаях слово будет похоже на другое слово, поэтому я хочу отобразить «См. Также:», а затем список похожих слов, которые при касании вызывают другое определение.

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

Является ли UIWebView единственным способом сделать это, или я упустил что-то очевидное в SDK? Кроме того, я бы предпочел остаться в родном SDK и не идти по маршруту Three20.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Боюсь, UIWebView будет единственной вещью, которая подходит здесь. Детекторы данных являются единственным способом связывания внутри UITextView, и они будут отвечать только на соответствующие типы данных (номер телефона, веб-страница, адрес) ...

Ссылки можно сделать обычным способом:

<a href='http://someotherword'>someotherword</a>

Настройте webviewdelegate для захвата любых запросов на ссылки (и предотвращения их открытия в браузере), чтобы вы могли открывать их в собственном обработчике:

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request
{
  if(navigationType == UIWebViewNavigationTypeOther) return YES; // Allow direct loading

  NSString *myWord = [[request URL] host];
  // do something with myWord... say open another word
  return NO; // Don't let the browser actually perform this navigation
}
2 голосов
/ 20 августа 2009

Я бы использовал другой UITableView, чтобы сделать эту работу. Ваш список похожих слов, вероятно, будет уже в формате NSArray, поэтому было бы довольно легко настроить другой UITableView вместо UITextView для отображения списка, и учитывая, что у вас уже есть этот код, работающий для main UITableView, вы уже знаете, как сделать их кликабельными!

...