必要なものを実現する最も簡単な方法は、UITextView の代わりに UIWebView を使用することです。指示テキストを次のような HTML ファイルに変換します。
<html>
<head></head>
<body>
<div>This is a dummy text with a <a href="definition://id1234">clickable keyword</a> inside the text</div>
</body>
</html>
クリック可能なキーワードをタグに入れると、クリック可能
になり、UIWebView のデリゲート メソッドでこのクリックをインターセプトできます。
HTML テキストを UIWebView にロードします。
UIWebView *webView = [[UIWebView alloc] init];
webView.delegate = self;
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://yourdomain.com/text.html"]]];
WebView にデリゲートを割り当てると (上記のコード スニペットのように)、UIWebView がリクエストを行うたびに次のメソッドが呼び出されます。ここで、キーワードのクリックを傍受できます。キーワード HTML リンクに独自のスキーム (「definition://」) を付けて、インターセプトを少し簡単にし、信頼性を高めました。(後で HTML に他のリンクを含めることができます。)
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if ([[request.URL scheme] isEqualToString:@"definition"]) {
NSString *definitionWordID = [request.URL host];
NSLog(@"show definition for word with ID: %@", definitionWordID);
return NO;
}
return YES;
}
これが、あなたが達成したいことを実装する方法です。HTML を使用すると、キーワードに HTML リンクを使用しているため、テキスト内のキーワードの位置を気にする必要がないという大きな利点があります。それに加えて、HTML を使用すると、CSS を介してテキストのスタイルを設定できます。