April 15, 2016

TTTAttributedLabelでUILabelの一部をリンクにする

利用規約に同意してログインする」的な UILabel で、タップしたら遷移するようにする。TTTAttributedLabel を使う。

Podfile に TTTAttributedLabel を追加

# Podfile

pod 'TTTAttributedLabel'

InterfaceBuilder

UILabel を配置するのと同じように、適当に配置する。Class を、 TTTAttributedLabel にしておく。

Linkをコードで設定する

var label : TTTAttributedLabel!

的なプロパティが設定してあるという前提で、文字列は「利用規約に同意してログインする」になってるとします。

Linkの設定

class SomeViewController: UIViewController, TTTAttributedLabelDelegate {

// ...

label.delegate = self
        
label.linkAttributes = [
    kCTForegroundColorAttributeName: UIColor.grayColor(),
    NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleNone.rawValue
]
        
legalLabel.activeLinkAttributes = [
    kCTForegroundColorAttributeName: UIColor.lightGrayColor(),
]
        
if let text = legalLabel.text {
    let termsRange = NSString(string: text).rangeOfString("利用規約")
    legalLabel.addLinkToURL(termsUrl, withRange: termsRange)
}

とする。 linkedAttributes でリンクが設定された文字列の見た目を規定して、activeLinkAttributes でリンクがタップされている間の文字列の見た目を設定できる。

delegateメソッドの設定

// MARK: TTTAttributedLabelDelegate
    
func attributedLabel(label: TTTAttributedLabel!, didSelectLinkWithURL url: NSURL!) {
    if url == termsUrl {
        // ここで某かの処理をすればOK
        performSegueWithIdentifier("goToTerms", sender: nil)
    }
}

© Chu 2017