zoukankan      html  css  js  c++  java
  • [Swift通天遁地]一、超级工具-(1)动态标签:给UILabel文字中的Flag和url添加点击事件

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
    ➤微信公众号:山青咏芝(shanqingyongzhi)
    ➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/
    ➤GitHub地址:https://github.com/strengthen/LeetCode
    ➤原文地址:https://www.cnblogs.com/strengthen/p/10128172.html 
    ➤如果链接不是山青咏芝的博客园地址,则可能是爬取作者的文章。
    ➤原文已修改更新!强烈建议点击原文地址阅读!支持作者!支持原创!
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

    目录:[Swift]通天遁地Swift

    本文将演示动态标签的使用,它允许用户在标签上进行互动操作。

    点击【Podfile】,查看安装配置文件。

    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】项目文件,打开已经安装动态标签的空白项目。

    在项目导航区,打开视图控制器的代码文件【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,  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,  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
    
    " +
     77             "Let's trim a long link: 
    https://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 }
  • 相关阅读:
    Android 源代码在线查看
    Android天气预报程序开发
    为自己的网站写个api接口
    Windows Server 2012改造成Windows8的方法(新增解决网络卡)
    完整java开发中JDBC连接数据库代码和步骤
    RF频偏
    通信系统架构,RF架构
    RF 速率与引导码preamble关系
    ubuntu虚拟机共享无线网上网
    win7下AdHoc网络设置共享外网上网
  • 原文地址:https://www.cnblogs.com/strengthen/p/10128172.html
Copyright © 2011-2022 走看看