Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/recruit-mtl/MTLLinkLabel
https://github.com/recruit-mtl/MTLLinkLabel
Last synced: about 1 month ago
JSON representation
- Host: GitHub
- URL: https://github.com/recruit-mtl/MTLLinkLabel
- Owner: recruit-mtl
- License: mit
- Created: 2015-10-08T02:16:42.000Z (over 9 years ago)
- Default Branch: master
- Last Pushed: 2019-11-26T15:52:13.000Z (about 5 years ago)
- Last Synced: 2024-04-29T01:00:24.833Z (9 months ago)
- Language: Swift
- Size: 157 KB
- Stars: 74
- Watchers: 11
- Forks: 23
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-ios - MTLLinkLabel - MTLLinkLabel is linkable UILabel. Written in Swift. (UI / Label)
- awesome-ios-star - MTLLinkLabel - MTLLinkLabel is linkable UILabel. Written in Swift. (UI / Label)
README
#
[![Badge w/ Version](https://cocoapod-badges.herokuapp.com/v/MTLLinkLabel/badge.png)](https://cocoadocs.org/docsets/MTLLinkLabel) [![Carthage compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)
[![MIT License](http://img.shields.io/badge/license-MIT-blue.svg?style=flat)](LICENSE)MTLLinkLabel is linkable UILabel. Written in Swift.
## Requirements
- iOS 8.0+
- Xcode 7.3+## Installation
### [Carthage](https://github.com/Carthage/Carthage)
You can install Carthage with Homebrew.
```bash
$ brew update
$ brew install carthage
```
specify it in your `Cartfile``github "recruit-mtl/MTLLinkLabel"`
And run `carthage`
```bash
$ carthage update --platform ios
```### [CocoaPods](https://cocoapods.org)
```bash
$ pod init
```specify it in your `Podfile`
```ruby
platform :ios, '8.0'target 'MTLLinkLabelExample' do
use_frameworks!
pod 'MTLLinkLabel', '~> 0.1.6'
end
```And run `CocoaPods`
```bash
$ 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.
```swift
label.userInteractionEnabled = true
```#####Assign String to LinkLabels 'text' property.
```swift
label.text = "Hello. https://github.com/recruit-mtl/MTLLinkLabel"
```> Hello. [https://github.com/recruit-mtl/MTLLinkLabel](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.
```swift
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.
```swift
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](https://github.com/recruit-mtl/MTLLinkLabel/blob/master/LICENSE)
## Author
- [kokoron: Twitter](https://twitter.com/kokoron)
- [kokoron: github](https://github.com/kokoron)