2015-08-14 105 views
9

我想使用Swift在UILabel文本中設置可點擊的特定字。使用Swift製作可點擊的UILabel

可能嗎?

如果多於一個標籤在這裏如何檢測哪個單詞被按下?

+1

添加點擊手勢標籤你可以得到它的動作。 –

回答

18

你不能用簡單的標籤。

github上有圖書館。

https://github.com/TTTAttributedLabel/TTTAttributedLabel

從這裏就可以使用的方法稱爲yourLabel.addLinkToURL()

class ViewController: UIViewController , TTTAttributedLabelDelegate{ 

    @IBOutlet var lbl: TTTAttributedLabel! 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     var str : NSString = "Hello this is link" 
     lbl.delegate = self 
     lbl.text = str as String 
     var range : NSRange = str.rangeOfString("link") 
     lbl.addLinkToURL(NSURL(string: "http://github.com/mattt/")!, withRange: range) 
    } 

    func attributedLabel(label: TTTAttributedLabel!, didSelectLinkWithURL url: NSURL!) { 
     UIApplication.sharedApplication().openURL(url) 
    } 
} 

enter image description here

+0

@ Daij-Djan好的,先生。你能請回答嗎?所以提問者也會得到正確的結果和答案。 –

+0

我試試。我沒有這樣做:)它。我期待馬上 –

+0

我相信最簡單的解決方案是使用1-2標籤和一個按鈕。 Autolayout使它非常簡單。 – Sulthan

1

SWIFT 3.0

privacyLabel.delegate = self 
    let strPolicy : NSString = "Agree to the Terms & Conditions" 
    privacyLabel.text = strPolicy as String 
    let range1 : NSRange = strPolicy.range(of: "Terms & Conditions") 
    privacyLabel.addLink(to: URL(string: "http://Terms.com")!, with: range1) 



    func attributedLabel(_ label: TTTAttributedLabel!, didSelectLinkWith url: URL!) { 

     print("url \(url)") 
      // UIApplication.sharedApplication().openURL(url) 
    } 
0

我想分享我的圖書館https://github.com/psharanda/Atributika

它包含了現代更換TTTAtributedLabel +一套功能強大的方法來檢測和風格不同的東西,如標籤,主題標籤,提到等(的一切都可以點擊)

一些代碼來顯示如何作品:

let link = Style 
     .font(.boldSystemFont(ofSize: 14)) 
     .foregroundColor(.black) 
     .foregroundColor(.red, .highlighted) 

    let tos = link.named("tos") 
    let pp = link.named("pp") 

    let all = Style 
     .font(.systemFont(ofSize: 14)) 
     .foregroundColor(.gray) 

    let text = "<tos>Terms of Service</tos> and <pp>Privacy Policy</pp>" 
     .style(tags: tos, pp) 
     .styleAll(all) 

    let tosLabel = AttributedLabel() 
    tosLabel.textAlignment = .center 
    tosLabel.attributedText = text 
    tosLabel.onClick = { label, detection in 
     switch detection.type { 
     case .tag(let tag): 
      switch tag.name { 
      case "pp": 
       print("Privacy Policy clicked") 
      case "tos": 
       print("Terms of Service clicked") 
      default: 
       break 
      } 
     default: 
      break 
     } 
    } 

    view.addSubview(tosLabel)