MTLLinkLabel is linkable UILabel.
  • June 3, 2025

MTLLinkLabel is linkable UILabel. Written in Swift.

Requirements


  • iOS 8.0+
  • Xcode 7.3+

Installation


Carthage

You can install Carthage with Homebrew.

$ brew update
$ brew install carthage

specify it in your Cartfile

github "recruit-mtl/MTLLinkLabel"

And run carthage

$ carthage update –platform ios

CocoaPods

$ pod init

specify it in your Podfile

platform :ios, ‘8.0’

target ‘MTLLinkLabelExample’ do

use_frameworks!

pod ‘MTLLinkLabel’, ‘~> 0.1.6’

end

And run CocoaPods

$ pod install

Usage


You can use MTLLinkLabel in Storyboard or XIB.

#####Drag and drop UILabel in your view.

#####Change UILabels custom class to ‘LinkLabel’, and Change module to ‘MTLLinkLabel’.

You must change labels userInteractionEnabled property to true. Because, this labels properties default value is false.

label.userInteractionEnabled = true

#####Assign String to LinkLabels ‘text’ property.

label.text = “Hello. https://github.com/recruit-mtl/MTLLinkLabel”

Add custom link

You can add custom link in LinkLabel with range and Action at the time of the link selection.

let range = (text as NSString).rangeOfString(“1829”)

cell.label.addLink(
NSURL(string: “https://www.google.co.jp/#q=1829”)!,
range: range,
linkAttribute: [
NSForegroundColorAttributeName: UIColor.redColor(),
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue
]
) { (url) -> Void in

let alert = UIAlertController(title: nil, message: url.absoluteString, preferredStyle: UIAlertControllerStyle.ActionSheet)
alert.addAction(UIAlertAction(title: “Go”, style: .Default, handler: { (action) -> Void in
UIApplication.sharedApplication().openURL(url)
}))
alert.addAction(UIAlertAction(title: “Cancel”, style: .Default, handler: nil))
self.presentViewController(alert, animated: true, completion: nil)
}

Delegate

LinkLabelDelegate methods are optional method.

The default implementation is implemented in protocol extension.

public extension LinkLabelDelegate {

func linkLabelExecuteLink(linkLabel: LinkLabel, text: String, result: NSTextCheckingResult) -> Void {

if result.resultType.contains(.Link) {

let pattern = “[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]+”
if NSPredicate(format: “SELF MATCHES ‘\(pattern)'”).evaluateWithObject(text) {
UIApplication.sharedApplication().openURL(NSURL(string: “mailto:” + text)!)
return
}

let httpText = !text.hasPrefix(“http://”) && !text.hasPrefix(“https://”) ? “http://” + text : text

guard let url = NSURL(string: httpText) else { return }
UIApplication.sharedApplication().openURL(url)

}
else if result.resultType.contains(.PhoneNumber) {
let telURLString = “tel:” + text
UIApplication.sharedApplication().openURL(NSURL(string: telURLString)!)
}
}

func linkAttributeForLinkLabel(linkLabel: LinkLabel, checkingType: NSTextCheckingType) -> [String: AnyObject] {
return [
NSForegroundColorAttributeName: linkLabel.tintColor,
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue
]
}

func linkDefaultAttributeForCustomeLink(linkLabel: LinkLabel) -> [String: AnyObject] {
return [
NSForegroundColorAttributeName: linkLabel.tintColor,
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue
]
}

func linkLabelCheckingLinkType() -> NSTextCheckingTypes {
return NSTextCheckingType.Link.rawValue
| NSTextCheckingType.PhoneNumber.rawValue
}
}

GitHub


View Github

YOU MIGHT ALSO LIKE...
🧭 NavigationKit

NavigationKit is a lightweight library which makes SwiftUI navigation super easy to use. 💻 Installation 📦 Swift Package Manager Using Swift Package Manager, add ...

swiftui-navigation-stack

An alternative SwiftUI NavigationView implementing classic stack-based navigation giving also some more control on animations and programmatic navigation. NavigationStack Installation ...

Stinsen

Simple, powerful and elegant implementation of the Coordinator pattern in SwiftUI. Stinsen is written using 100% SwiftUI which makes it ...

SwiftUI Router

With SwiftUI Router you can power your SwiftUI app with path-based routing. By utilizing a path-based system, navigation in your app becomes ...

FlowStacks

This package takes SwiftUI's familiar and powerful NavigationStack API and gives it superpowers, allowing you to use the same API not just ...