データや画像の検出と埋め込み

2014年10月6日(月)
西方 夏子(にしかた・なつこ)
UIKit徹底解説 iOSユーザーインターフェイスの開発
iPhone/iPadアプリのUI開発テクニックを完全網羅!Amazon詳細ページへ

この記事は、書籍『UIKit徹底解説 iOSユーザーインターフェイスの開発』の内容を、Think IT向けに特別公開しているものです。

UITextViewは、リンクなどのデータを検出する機能を持っています。検出可能なデータの種類は以下の通りです。

  • UIDataDetectorTypePhoneNumber(電話番号)
  • UIDataDetectorTypeLink(リンク)
  • UIDataDetectorTypeAddress(住所)
  • UIDataDetectorTypeCalendarEvent(カレンダーイベント)

検出対象とするデータタイプはIBで設定するか、UITextViewのdataDetectorTypesプロパティで指定します。なお、データ検出は、編集不可(editableプロパティの値がNO)のUITextViewに対してのみ有効です。
全タイプを検出可能にすると、検出されたデータがリンクとして表示されます(図13)。

図13: データ検出の結果

データ検出されたテキストのアピアランスを調整する方法として、UITextViewにlinkTextAttributesプロパティが用意されています(iOS 7以降)。linkTextAttributesには、前項で解説したNSAttributedStringで使用される属性を設定します。
例えば、二重下線付きのオレンジ色テキストとするには、下記のlinkTextAttributesプロパティを設定します*4

*4 iOS 7.1時点では、linkTextAttributesに設定したいくつかの属性(NSFontAttributeNameなど)が機能しない問題があります。

[ソースコード31] 検出データテキストのアピアランスを変更

self.textView.linkTextAttributes =
    @{NSUnderlineStyleAttributeName: @(NSUnderlineStyleDouble),
      NSForegroundColorAttributeName: [UIColor orangeColor]};

その表示結果が下図です(図14)。

図14: データ検出の結果(linkTextAttributesによるアピアランス変更)

検出データをタップすると、各データの種別に応じた処理が促されます。例えば、URLリンクであれば「Safari」を開く、電話番号であれば電話を掛けるなどの処理です。
なお、このデフォルトの処理は、UITextViewDelegateのメソッドを利用してカスタマイズが可能です(iOS 7以降)。例えば、リンク先を「Safari」ではなくアプリ内で開くには、デリゲートメソッドを実装します(ソースコード32)。

[ソースコード32] 検出データタップ時の処理

- (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL
                                                      inRange:(NSRange)characterRange
{
    if ([[URL scheme] rangeOfString:@"http"].location != NSNotFound) {
        // UIWebViewを利用してアプリ内でリンクを開く
        return NO;
    }
    return YES;
}

検出データの種別により、上記メソッドに渡される引数URLのスキームが異なります。電話番号は「tel」スキーム、住所とカレンダーイベントは「x-apple-data-detectors://embeded-result」スキームが利用されます。それ以外は、検出したスキームがそのまま用いられます。

上記の例では、UITextViewの機能を使用してリンクの検出を行っていますが、属性付きテキストを用いてテキストにリンクを埋め込むことも可能です(iOS 7以降)。
リンクの埋め込みに使用する属性は、NSLinkAttributeNameです。値はNSURLオブジェクト(推奨)またはNSStringオブジェクトで指定します。

著者
西方 夏子(にしかた・なつこ)

ソフトウェアエンジニア。大手電機メーカーにおける組込みソフトウェアの開発を経て、現在は個人でiOS向けのアプリケーションを開発している。代表作であるローン計算アプリ「iLoan Calc」は、個人の方のみならず、多くの不動産業、金融業の方からも愛用されている。『iPhoneアプリ開発エキスパートガイド iOS6対応』(共著・インプレスジャパン刊)、『上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編』(共著・インプレスジャパン刊)などの執筆にも携わり、現在は執筆業を中心にアプリ開発と育児を両立中。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています