7

クリック可能なリンクを機能させるための解決策を検討しています。UITextView + NSAttributedString を使用するとこれを機能させることができますが、UITableViewCell の場合は適切に自動レイアウトされません。

これで TTTAttributedLabel をプロジェクトに追加し、ビューのスタイルを完璧に設定しました。リンクも青色に変わり、下線が引かれます。

ただし、それらをクリックしても何も起こりません。コントローラーに TTTAttributedLabelDelegate を実装し、ストーリーボードのラベルに MyLabel を実装しました (これは TTTAttributedLabel を拡張するだけで、デリゲート オプションを同じ関数内で起動させたいためです)。今のところ、コントローラーをデリゲートに設定しましたが、それ自体を指すとうまくいかないかもしれないと考えていました。

しかし、これらの関数はどれも起動されません。ブレークポイントとログを取得しました。

didSelectLinkWithUrl と didLongPressLinkWithUrl を実装しました。

 func attributedLabel(label: TTTAttributedLabel!, didSelectLinkWithURL url: NSURL!) {
        Debug.log("link clicked")
    }
    func attributedLabel(label: TTTAttributedLabel!, didLongPressLinkWithURL url: NSURL!, atPoint point: CGPoint) {
        Debug.log("link long clicked")
    }

出口

@IBOutlet weak var content: MyLabel!

マイラベル

import UIKit import TTTAttributedLabel

class MyLabel : TTTAttributedLabel, TTTAttributedLabelDelegate {

override func didMoveToSuperview() {
    if (self.delegate == nil) {
        self.delegate = self
    }
    self.enabledTextCheckingTypes = NSTextCheckingType.Link.rawValue
    self.userInteractionEnabled = true
}

func attributedLabel(label: TTTAttributedLabel!, didSelectLinkWithURL url: NSURL!) {
    Debug.log("link clicked")
}
func attributedLabel(label: TTTAttributedLabel!, didLongPressLinkWithURL url: NSURL!, atPoint point: CGPoint) {
    Debug.log("link long clicked")
}

私が何を見逃しているか知っている人はいますか?

アップデート

URL f/e http://example.comを貼り付けるだけでアクティブになり、実際にクリック可能になり、didSelectLinkWithUrl がクリック可能になることがわかりましたが、属性付きの文字列が必要であり、HTML 文字列に基づいています。

4

2 に答える 2

2

アーロン・ブラガーは正しい!以前は同じ問題を抱えていましたが、次の行を置き換えることで Swift で修正しました。

label.attributedText = attributedString

次の行で:

label.setText(attributedString)

setText メソッドが AnyObject を受け入れるため、これはコンパイラによって受け入れられます。また、リンクの属性付き文字列のフォントを増やして、タップをキャプチャし、現在機能しています! これを切り捨てリンクに使用しました。これが全体です。

label.lineBreakMode = .ByTruncatingHead
label.attributedTruncationToken = NSMutableAttributedString(string: "... Show more", attributes: [NSForegroundColorAttributeName: UIColor.cueCyan(), NSLinkAttributeName: readMoreLink, NSFontAttributeName: UIFont.formFont(.Light, size: fontSize+24)!])
label.userInteractionEnabled = true
label.delegate = self
于 2016-12-12T14:27:57.460 に答える