No description, website, or topics provided.
Switch branches/tags
Nothing to show
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
MTLLinkLabel.xcodeproj Change pod spec May 27, 2016
MTLLinkLabel Add comments and docs May 30, 2016
MTLLinkLabelExample_carthage Add carthage example May 30, 2016
MTLLinkLabelExample_pod Add carthage example May 30, 2016
MTLLinkLabelTests Change licence May 27, 2016
docs Add comments and docs May 30, 2016
.gitignore Add carthage example May 30, 2016
LICENSE Change licence May 27, 2016
MTLLinkLabel.podspec change podspec May 30, 2016
README.md Add logo Jun 2, 2016

README.md

#MTLLinkLabel

Badge w/ Version Carthage compatible MIT 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._%+-]+@[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