読者です 読者をやめる 読者になる 読者になる

そーす

福岡在住のプログラマ

文章中の任意のテキストをクリック可能にする

Swift iOS

f:id:saburesan:20160427075732p:plain

UITextFieldを使う

というかUITextFieldじゃないとクリックイベントが発火しないようです。 UILabelとかUITextViewはだめみたいです。

クリック可能な部分のテキストのスタイル定義

UITextFieldのlinkTextAttributesプロパティにスタイルをセットします。

たとえば、テキストを白にして下線を付けるとすると

textField.linkTextAttributes = [NSForegroundColorAttributeName: UIColor.white NSUnderlineStyleAttributeName: 1]

こうなります。 リンクテキストのスタイルはattributedTextプロパティでは上書きできないのでlinkTextAttributesを必ずセットする必要があります。

NSMutableAttributedStringを作成する

リンクを含む全体のテキストで初期化します。

let attr = NSMutableAttributedString(string: "テキスト、リンク1、リンク2")

リンクさせたいテキストの位置を取得する

let startIndex = attr.string.distance(from: attr.string.startIndex, to: attr.string.range(of: "リンク1")!.lowerBound)

これでstatIndexには文章中のリンク1の先頭位置が入ります。 決め打ちでやるよりも、文章の変更や多言語対応などを考えると計算したほうがよいでしょう。

あとはスタイルをattrに追加するだけです。

attr.addAttribute(NSLinkAttributeName, value: "開くURL", range: NSRange(location: startIndex, length: "リンク1".characters.count))
textField.attributedText = attr