在UILabel中制作一些蓝色且可点击的文本

时间:2017-01-03 15:00:40

标签: ios swift textview nsattributedstring

我需要制作"使用条款"在蓝色下面的字符串中,让它响应一次点击。我不想使用按钮,所以如何在UILabel中执行此操作? 字符串:点按“下一步”并继续,即表示您同意使用条款

代码我试过但失败只是文本颜色变化:

var myMutableString = NSMutableAttributedString()
            myMutableString = NSMutableAttributedString(string: self.termsLabel.text! as String, attributes: [NSFontAttributeName:UIFont(name: self.termsLabel.font.fontName, size: self.termsLabel.font.pointSize)!])
            myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange(location:self.termsLabel.text!.characters.count - 12,length:12))
            self.termsLabel.attributedText = myMutableString

2 个答案:

答案 0 :(得分:1)

不要使用UILabel。使用UITextField或UITextView,并将属性文本安装到其中,包括链接。然后设置委托方法来检测&回应链接。您需要实现UITextViewDelegate方法

func textView(UITextView, 
  shouldInteractWith: URL, 
  in: NSRange, 
  interaction: UITextItemInteraction)

配置链接的最简单方法之一是将RTF文件的内容加载到字段中。

我在GitHub上有一个名为DatesInSwift的演示项目,该项目创建可点击的链接,触发调用应用程序中URL的自定义URL。

该项目使用UITextView的扩展,它将@IBInspectable属性RTF_Filename添加到UITextView字段。您所要做的就是将文本视图的RTF_Filename属性设置为您需要加载的RTF文件的文件名。

看起来我的项目是为Swift 2编写的,并使用了旧版本的UITextViewDelegate方法,该方法被称为

  

func textView(_ textView:UITextView,       shouldInteractWithURL URL:Foundation.URL,       inRange characterRange:NSRange) - >布尔

答案 1 :(得分:0)

我得出的结论是,我无法得到我想要的内容,因此我将文本放在一个按钮中并添加了此代码

let mainText = "By tapping Next and continuing you agree to the Terms Of Use"
    let attributeText = "Terms Of Use"
    let range = (mainText as NSString).range(of: attributeText)
    let attributedString = NSMutableAttributedString(string:mainText)
    attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blue, range: range)
    self.termsLabel.attributedText = attributedString
    let tapGesture: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.goToTOSView))
    tapGesture.numberOfTapsRequired = 1
    self.termsLabel.isUserInteractionEnabled =  true
    self.termsLabel.addGestureRecognizer(tapGesture)