iOS - Swift如何在UILabel

时间:2016-06-02 17:34:03

标签: html swift tags uilabel

这是我的代码,显示了UILabel中的链接

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var textFiled: UITextField!

    @IBOutlet weak var label: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let attrStr = try! NSAttributedString(
            data: "This is a link <a href='http://www.google.com'>google</a>".dataUsingEncoding(NSUnicodeStringEncoding, allowLossyConversion: true)!,
            options: [ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType],
            documentAttributes: nil)
        label.attributedText = attrStr
    }

}

enter image description here

从图片中可以看出,它正确显示了我想要的链接,但链接无法单击以跳转到Web视图或其他链接。实际上,我需要自定义链接点击事件,我真的不知道:

  1. 如何获取链接的网址。
  2. 如果有多个链接,我需要做什么。
  3. 首先感谢您查看此问题。

3 个答案:

答案 0 :(得分:0)

简短的回答是UILabel不支持打开URL。它可以检测到链接存在,但它不会做任何事情。

您可以找到问题解决方案的替代方案,您可以阅读here

答案 1 :(得分:0)

卢克说,UILabels不支持网址。但您可以创建一个看起来像标签的按钮。摆脱背景(所以看起来像文本)并实现按钮的功能以打开webview。您可以使用属性字符串编辑按钮中文本的样式。

当您将按钮添加到UI时,您将需要考虑使用自定义类而不是默认的uibutton类。

你需要:

  1. init

     - (instancetype)initWithFrame:(CGRect)frame {
       self = [super initWithFrame:frame];
         if (self)
         {
             //call the method to configure the button
             [self configure];
         }
       return self;
     }
    
  2. 如果使用属性字符串,则实现setTitle或setAttributedTitle

     - (void) setTitle:(NSString *)title forState:(UIControlState)state
     {
            [super setTitle:title forState:state]
     }      
    
  3.       - (void)setAttributedTitle:(NSAttributedString *)title forState:   (UIControlState)state{
                [super setAttributedTitle:title forState:state];
             }
    

    3。配置按钮

             -(void) configure{
                 //configure the buttons label here 
                 //you will want to set no background colour
              }
    

    4。将按钮添加到viewcontroller并将类更改为您创建的自定义类。

答案 2 :(得分:0)

强烈建议使用UITextView对象而不是UILabel,但是您可以将KILabel项目用作UILabel替代方案。 见https://github.com/Krelborn/KILabel/blob/master/README.md