- July 26, 2025
- Mins Read
MTLLinkLabel is linkable UILabel. Written in Swift.
$ brew update
$ brew install carthage
specify it in your Cartfile
github "recruit-mtl/MTLLinkLabel"
And run carthage
$ carthage update –platform ios
$ 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
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”
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)
}
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
}
}
NavigationKit is a lightweight library which makes SwiftUI navigation super easy to use. 💻 Installation 📦 Swift Package Manager Using Swift Package Manager, add ...
An alternative SwiftUI NavigationView implementing classic stack-based navigation giving also some more control on animations and programmatic navigation. NavigationStack Installation ...
With SwiftUI Router you can power your SwiftUI app with path-based routing. By utilizing a path-based system, navigation in your app becomes ...
This package takes SwiftUI's familiar and powerful NavigationStack API and gives it superpowers, allowing you to use the same API not just ...