如何在UILabel文本中混合使用UIButton?

时间:2016-09-08 01:19:58

标签: swift uibutton swift2 uilabel

我正在尝试让通知表格单元格中的标签沿着“User1成为User2的朋友”,其中User1& User2是打开所述用户的简档视图的按钮。当文本环绕时会发生此问题。例如:

                WANT                              DON'T WANT
|                                      |  |                           |
| "John Doe" became friends with "Jane |  | "John" friends with "Jane"|
| Smith"                               |  |                     "Doe "|
 ^notice how to wraps around               wraps within btn bounds^
  all the way back to left margin                

我非常希望Swift等同于这个HTML:<a href=..>Button 1</a> some plain text <a href=..>Button 2</a>。有没有办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用UITextView实现此目的。 UITextView检测网址,您可以像这样使用该功能。

您可以为这些可点击的值添加虚拟网址值,然后在uitextview中可以点击这些值。以下是示例代码: -

import UIKit

class ViewController: UIViewController, UITextViewDelegate {

  @IBOutlet weak var label: UILabel!
  @IBOutlet weak var textView: UITextView!

  let user01 = "http://www.dummyLinks";
  let user02 = "http://www.dummy.com/privacy";

  override func viewDidLoad() {
      super.viewDidLoad()
      self.textView.delegate = self
      let labelText = "Chathuranga Silva is now Freind with Jason"
      let string = NSMutableAttributedString(string: labelText)
      var textRange = string.mutableString.rangeOfString("Chathuranga Silva")
      string.addAttribute(NSLinkAttributeName, value: user01, range: textRange)
      textRange = string.mutableString.rangeOfString("Jason")
      string.addAttribute(NSLinkAttributeName, value: user02, range: textRange)
      textView.attributedText = string
      // Do any additional setup after loading the view, typically from a nib.
  }

  func textView(textView: UITextView, shouldInteractWithURL URL: NSURL, inRange characterRange: NSRange) -> Bool {
      if (URL.absoluteString == user01) {
          print("Selected user01")
      } else if (URL.absoluteString == user02) {
          print("Selected user02")
      }
      return false
  }

  override func didReceiveMemoryWarning() {
      super.didReceiveMemoryWarning()
      // Dispose of any resources that can be recreated.
  }
}

enter image description here