Popularity
2.7
Stable
Activity
0.0
Stable
76
11
22

Code Quality Rank: L5
Programming language: Swift
License: MIT License
Tags: UI     Label    

MTLLinkLabel alternatives and similar libraries

Based on the "Label" category.
Alternatively, view MTLLinkLabel alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of MTLLinkLabel or a related project?

Add another 'Label' Library

README

Badge w/ Version Carthage compatible [MIT License](LICENSE)

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"

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._%+-][email protected][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
    }
}

Licence

MIT

Author


*Note that all licence references and agreements mentioned in the MTLLinkLabel README section above are relevant to that project's source code only.