- August 28, 2025
- Mins Read
UILabel drop-in replacement supporting Hashtags (#), Mentions (@), URLs (http://), Emails and custom regex patterns, written in Swift
UILabel drop-in replacement
Add the following to your Cartfile and follow these instructions
github “optonaut/ActiveLabel.swift”
CocoaPods 0.36 adds supports for Swift and embedded frameworks. To integrate ActiveLabel into your project add the following to your Podfile:
platform :ios, ‘10.0’
use_frameworks!
pod ‘ActiveLabel’
import ActiveLabel
let label = ActiveLabel()
label.numberOfLines = 0
label.enabledTypes = [.mention, .hashtag, .url, .email]
label.text = “This is a post with #hashtags and a @userhandle.”
label.textColor = .black
label.handleHashtagTap { hashtag in
print(“Success. You just tapped the \(hashtag) hashtag”)
}
let customType = ActiveType.custom(pattern: “\\swith\\b”) //Regex that looks for “with”
label.enabledTypes = [.mention, .hashtag, .url, .email, customType]
label.text = “This is a post with #hashtags and a @userhandle.”
label.customColor[customType] = UIColor.purple
label.customSelectedColor[customType] = UIColor.green
label.handleCustomTap(for: customType) { element in
print(“Custom type tapped: \(element)”)
}
By default, an ActiveLabel instance has the following configuration
label.enabledTypes = [.mention, .hashtag, .url, .email]
But feel free to enable/disable to fit your requirements
When using ActiveLabel, it is recommended to use the customize(block:) method to customize it. The reason is that ActiveLabel is reacting to each property that you set. So if you set 3 properties, the textContainer is refreshed 3 times.
When using customize(block:), you can group all the customizations on the label, that way ActiveLabel is only going to refresh the textContainer once.
Example:
label.customize { label in
label.text = “This is a post with #multiple #hashtags and a @userhandle.”
label.textColor = UIColor(red: 102.0/255, green: 117.0/255, blue: 127.0/255, alpha: 1)
label.hashtagColor = UIColor(red: 85.0/255, green: 172.0/255, blue: 238.0/255, alpha: 1)
label.mentionColor = UIColor(red: 238.0/255, green: 85.0/255, blue: 96.0/255, alpha: 1)
label.URLColor = UIColor(red: 85.0/255, green: 238.0/255, blue: 151.0/255, alpha: 1)
label.handleMentionTap { self.alert(“Mention”, message: $0) }
label.handleHashtagTap { self.alert(“Hashtag”, message: $0) }
label.handleURLTap { self.alert(“URL”, message: $0.absoluteString) }
}
You have the possiblity to set the maximum lenght a url can have;
label.urlMaximumLength = 30
From now on, a url that’s bigger than that, will be trimmed.
https://afancyurl.com/whatever -> https://afancyurl.com/wh...
label.handleMentionTap { userHandle in print(“\(userHandle) tapped”) }
label.handleHashtagTap { hashtag in print(“\(hashtag) tapped”) }
label.handleURLTap { url in UIApplication.shared.openURL(url) }
label.handleEmailTap { email in print(“\(email) tapped”) }
label.handleCustomTap(for: customType) { element in print(“\(element) tapped”) }
label.filterHashtag { hashtag in validHashtags.contains(hashtag) }
label.filterMention { mention in validMentions.contains(mention) }
Before writing ActiveLabel we’ve tried a lot of the following alternatives but weren’t quite satisfied with the quality level or ease of usage, so we decided to contribute our own solution.
This package provides you with an easy way to show tooltips over any SwiftUI view, since Apple does not provide ...
SimpleToast is a simple, lightweight, flexible and easy to use library to show toasts / popup notifications inside iOS or ...
Create Toast Views with Minimal Effort in SwiftUI Using SSToastMessage. SSToastMessage enables you to effortlessly add toast notifications, alerts, and ...