[Swift通天遁地]1、超級工具-(1)動態標籤:給UILabel文字中的Flag和url添加點擊事件

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-qvajeacz-dc.html 
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html

目錄:[Swift]通天遁地Swiftios

本文將演示動態標籤的使用,它容許用戶在標籤上進行互動操做。git

點擊【Podfile】,查看安裝配置文件。github

1 platform :ios, '12.0'
2 use_frameworks!
3 
4 target 'DemoApp' do
5     source 'https://github.com/CocoaPods/Specs.git'
6     pod 'ActiveLabel'
7 end

根據配置文件的內容,進行動態標籤的安裝,正則表達式

而後點擊【DemoApp.xcworkspace】項目文件,打開已經安裝動態標籤的空白項目。swift

在項目導航區,打開視圖控制器的代碼文件【ViewController.swift】瀏覽器

如今編寫代碼,在項目中使用剛剛安裝的動態標籤。微信

  1 import UIKit
  2 //在類文件中引入動態標籤
  3 import ActiveLabel
  4 
  5 class ViewController: UIViewController {
  6 
  7     override func viewDidLoad() {
  8         super.viewDidLoad()
  9         // Do any additional setup after loading the view, typically from a nib.
 10         //第一種動態標籤。
 11         activeLabel()
 12         //第二種更強大的動態標籤
 13         customizeLabel()
 14     }
 15     
 16     //添加一個方法,用來製做動態標籤示例
 17     func activeLabel()
 18     {
 19         //建立一個原點在(0,0),寬度和高度都是320的標籤。
 20         let label = ActiveLabel(frame: CGRect(x: 0, y: 0, width: 320, height: 320))
 21         
 22         //動態標籤是對普通標籤的擴展,因此一樣擁有普通標籤視圖的各類屬性。
 23         //在此設置標籤視圖不限制行數。
 24         label.numberOfLines = 0
 25         //而後設置動態標籤的交互屬性,
 26         //包含:主題標籤、說起和網址等類型。
 27         //也就是說這些內容在標籤視圖中是可被點擊的。
 28         label.enabledTypes = [.mention, .hashtag, .url]
 29         //設置動態標籤的文字內容,
 30         //內容包含:一個主題標籤 + 一個提交符號
 31         //兩個符號和它們後面的文字內容將可被點擊。
 32         label.text = "This is a post with #hashtags and a @userhandle."
 33         //設置文字的顏色爲黑色
 34         label.textColor = .black
 35         //給主題標籤添加交互事件,
 36         //當用戶點擊該內容時,在控制檯輸出日誌信息,
 37         label.handleHashtagTap
 38         {
 39             hashtag in
 40             //日誌信息包含被點擊的標籤內容。
 41             print("Success. You just tapped the \(hashtag) hashtag")
 42         }
 43         
 44         //將標籤視圖添加到當前視圖控制器的根視圖
 45         self.view.addSubview(label)
 46         //設置根視圖的背景顏色爲橙色
 47         self.view.backgroundColor = UIColor.orange
 48     }
 49 
 50     //建立更增強大的動態標籤
 51     //添加一個方法,在這個新方法中,建立動態標籤。
 52     func customizeLabel()
 53     {
 54         //初始化一個指定顯示區域的動態標籤
 55         let label = ActiveLabel(frame: CGRect(x: 20, y: 40, width: view.frame.width - 40, height: 300))
 56         //將該動態標籤添加到當前視圖控制器的根視圖
 57         view.addSubview(label)
 58         
 59         //經過正則表達式建立自定義的動做類型
 60         let customType = ActiveType.custom(pattern: "\\sare\\b")
 61         let customType2 = ActiveType.custom(pattern: "\\ssupports\\b")
 62         
 63         //將自定義的動做類型,添加到動態標籤所支持的類型列表中。
 64         label.enabledTypes.append(customType)
 65         label.enabledTypes.append(customType2)
 66         
 67         //設置網址文字的最大長度,當超出該長度的數值時,將截取網址並在尾部添加省略號。
 68         label.urlMaximumLength = 31
 69         
 70         //接着對動態標籤的外觀屬性進行自定義設置
 71         label.customize
 72         {
 73             label in
 74             //設置動態標籤的文字內容,文字內容中包含了各類動態類型
 75             label.text = "This is a post with #multiple #hashtags and a @userhandle. Links are also supported like" +
 76                 " this one: https://www.cnblogs.com/strengthen/. Now it also supports custom patterns -> are\n\n" +
 77             "Let's trim a long link: \nhttps://www.cnblogs.com/strengthen/p/10022619.html"
 78             //設置標籤的行數
 79             label.numberOfLines = 0
 80             //設置標籤的行間距
 81             label.lineSpacing = 4
 82             
 83             //設置動態標籤對象的文字顏色
 84             label.textColor = UIColor(red: 102.0/255, green: 117.0/255, blue: 127.0/255, alpha: 1)
 85             //設置動態標籤對象的主題標籤文字的顏色
 86             label.hashtagColor = UIColor(red: 85.0/255, green: 172.0/255, blue: 238.0/255, alpha: 1)
 87             //設置動態標籤的說起文字的顏色
 88             label.mentionColor = UIColor(red: 238.0/255, green: 85.0/255, blue: 96.0/255, alpha: 1)
 89             //設置動態標籤的網址文字的顏色
 90             label.URLColor = UIColor(red: 85.0/255, green: 238.0/255, blue: 151.0/255, alpha: 1)
 91             //設置動態標籤對象的網址被選中時的顏色
 92             label.URLSelectedColor = UIColor(red: 82.0/255, green: 190.0/255, blue: 41.0/255, alpha: 1)
 93             
 94             //設置當用戶點擊動態標籤中的主題標籤或說起文字時,將彈出提示框,顯示相應內容
 95             label.handleMentionTap { self.alert("Mention", message: $0) }
 96             label.handleHashtagTap { self.alert("Hashtag", message: $0) }
 97             
 98             //添加網址的點擊事件
 99             label.handleURLTap
100             {
101                 //得到網址對象
102                 let url = URL(string: $0.absoluteString)
103                 //調用應用程序對象,在瀏覽器中打開該網址
104                 UIApplication.shared.openURL(url!)
105             }
106             
107             //設置動態標籤的第一種自定義動態類型的顏色
108             label.customColor[customType] = UIColor.purple
109             //和自定義類型被選中時的顏色
110             label.customSelectedColor[customType] = UIColor.green
111             //設置動態標籤的第二種自定義動態類型的顏色
112             label.customColor[customType2] = UIColor.magenta
113             //和自定義類型被選中時的顏色
114             label.customSelectedColor[customType2] = UIColor.green
115             
116             //給兩個自定義的動態類型添加點擊事件,
117             //當用戶點擊時,將彈出提示框,顯示相應的內容
118             label.handleCustomTap(for: customType) { self.alert("Custom type", message: $0) }
119             label.handleCustomTap(for: customType2) { self.alert("Custom type", message: $0) }
120         }
121     }
122     
123     //添加一個方法,用來響應點擊事件
124     func alert(_ title: String, message: String)
125     {
126         //建立一個警告彈出窗口,並設置彈出窗口的標題、信息和樣式等屬性
127         let vc = UIAlertController(title: title, message: message, preferredStyle: UIAlertController.Style.alert)
128         //給彈出窗口添加一個按鈕,當點擊該按鈕時,關閉彈出窗口
129         vc.addAction(UIAlertAction(title: "Ok", style: .cancel, handler: nil))
130         
131         //在當前的視圖控制器中,以模態的方式彈出窗口。
132         present(vc, animated: true, completion: nil)
133     }
134     
135     override func didReceiveMemoryWarning() {
136         super.didReceiveMemoryWarning()
137         // Dispose of any resources that can be recreated.
138     }
139 }
相關文章
相關標籤/搜索