具有自定义超链接样式的 UILabel,可选交互代理,最小化设置
创建一个具有属性文本的 UILabel,链接显示为蓝色和下划线,而在大多数情况下你不需要这样做。这相当尴尬,也是浪费时间来努力使它们按你希望的方式被样式化。
LinkLabel使得这一切都变得简单。不需要额外的代码,链接就显示与文本相同的颜色,但带有下划线。这就是默认值应该是的样子。
如果你想添加自定义样式,这同样非常简单。就像你为你的属性文本指定属性一样,你对链接想要不同的任何属性,都可以添加到LinkLabel的linkTextAttributes
和highlightedLinkTextAttributes
中。
Source
文件夹的内容拖入你的Xcode项目中。#import "UIKit/UIGestureRecognizerSubclass.h"
添加到Bridging Header文件。使用LinkLabel
而不是UILabel创建一个标签。
let myLabel = LinkLabel()
设置属性文本,包括NSLinkAttributeName
,按常规方式。
let text = "This is some text, which includes a link."
let fullRange = NSMakeRange(0, (text as NSString).length)
let linkRange = (text as NSString).rangeOfString("includes a link")
let attributedString = NSMutableAttributedString(string: text)
attributedString.addAttribute(NSFontAttributeName, value: UIFont.systemFontOfSize(15), range: fullRange)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.blackColor(), range: fullRange)
attributedString.addAttribute(NSLinkAttributeName, value: NSURL(string: "https://google.com")!, range: linkRange)
如果你还想定制链接外观
let linkTextAttributes = [
NSUnderlineStyleAttributeName: NSNumber(integer: NSUnderlineStyle.StyleSingle.rawValue),
NSForegroundColorAttributeName: UIColor.greenColor()
]
let highlightedLinkTextAttributes = [
NSUnderlineStyleAttributeName: NSNumber(integer: NSUnderlineStyle.StyleSingle.rawValue),
NSForegroundColorAttributeName: UIColor.redColor()
]
label.linkTextAttributes = linkTextAttributes
label.highlightedLinkTextAttributes = highlightedLinkTextAttributes
为了更容易响应用户点击链接,我增加了一个交互代理。采用LinkLabelInteractionDelegate
并实现这个代理的函数。
label.interactionDelegate = self
//MARK: LinkLabelInteractionDelegate
func linkLabelDidSelectLink(linkLabel linkLabel: LinkLabel, url: NSURL) {
print("did select link: \(url)")
}
由Andrew Hart创建,用于TwIM。