Swift简单实现一个常规条款、免责声明文字+带有链接的展示形式

效果:

IMG_F08DABE063A6-1.jpeg

class DisclamerView: UIView {
     //@objc weak var vc:UIViewController?
     //自定义协议
    @IBInspectable var diy_protocol:String = "diyprotocol"
    //超链接地址
    @IBInspectable var disclamerURLStr:String = " "
    //条款、免责声明描述文字
    @IBInspectable var infoStr = str_disclaimer
    //链接地址描述
    @IBInspectable var linkStr = ""
    //展示文字的大小(用于判断展示区域大小)
    @IBInspectable var font = UIFont.systemFont(ofSize: 13)

    lazy var infoTextView:UITextView = {
        let tv = UITextView()
        tv.delegate = self
        tv.isEditable = false
        tv.backgroundColor = UIColor.clear
        tv.isScrollEnabled = false
        //设置页边距上边距10,左右边距各10,底边距0  上,右,下,左
        tv.textContainerInset = UIEdgeInsetsMake(10, 0, 0, -5);
        self.addSubview(tv)
        return tv
    }()

    override func awakeFromNib() {
        super.awakeFromNib()
        self.backgroundColor = UIColor.groupTableViewBackground
    }

    override func draw(_ rect: CGRect) {
        // Drawing code
        let attri = NSMutableAttributedString(attributedString: NSAttributedString(string: infoStr + linkStr,
                                                                                   attributes:[NSAttributedStringKey.foregroundColor : UIColor.darkGray,
                                                                                               NSAttributedStringKey.font : font]))
        if linkStr != ""{
            attri.addAttributes([NSAttributedStringKey.link:(diy_protocol+"://")],
                                range: ((attri.string) as NSString).range(of: linkStr))
        }
        infoTextView.attributedText = attri
        //左右两天预留5个像素
        infoTextView.frame = CGRect(x: 5, y: 0, width: rect.width - 5*2, height: rect.height)
    }
}

extension DisclamerView:UITextViewDelegate{
    //textView里带有超链接的监听代理
    func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool {
        //判断超链接协议
        if let sch = URL.scheme,sch == diy_protocol {
            //let ndvc = SFNewsDetailVC(nibName: "SFNewsDetailVC", bundle: nil)
           // ndvc.requstURL = disclamerURLStr;
            //if let vc = vc as? UINavigationController{
            //    vc.pushViewController(ndvc, animated: true)
           // }else{
            //    ndvc.isPresent = true
            //    vc?.present(ndvc, animated: true, completion: nil)
           /// }
            return true
        }
        return false
    }
}

XIB使用:

self.disclamerView.linkStr = @"点击查看详情";
 // CGFloat dh = [STools getDisclaimerStrContentHeightWithDSize:CGSizeMake(SWIDTH - 5*2, 10000) dFont:self.disclamerView.font] + 18;
    self.h_disclamerView.constant = dh;

image.png

image.png

纯代码使用

    lazy var disclamerView:DisclamerView = {
        let dv = DisclamerView()
        dv.backgroundColor = color_background
        let dh = STools.getDisclaimerStrContentHeight(dFont: dv.font) + 18
        dv.frame = CGRect(x: 0, y: 0,width: swidth, height: dh)
        dv.vc = self
        return dv
    }()

   self.tableView.tableFooterView = disclamerView

原文地址:https://www.cnblogs.com/mapanguan/p/9019522.html

时间: 2024-12-17 07:41:24

Swift简单实现一个常规条款、免责声明文字+带有链接的展示形式的相关文章

Exchange Server 2016管理系列课件32.传输规则部署免责声明

企业场景 1)财务.人力资源发送的邮件: 2)其他部门涉及到的机密信息,邮件合规性要求: 可以将电子邮件免责声明.法律免责声明.泄漏声明.签名,或其他信息添加到传入或传出组织的电子邮件的顶部或底部.出于法律.业务或法规要求,可能需要执行此操作以确定潜在的不安全的电子邮件,或出于组织独有的其他原因,可能需要执行此操作. 添加方式 打开EMC,可以将传输规则免责声明应用到多个人,或者用户组. 选择[邮件流],然后选择[规则]界面. 在规则界面,选择"应用免责声明",如图. 免责声明规则的回

本博客免责声明、版权声明

免责声明: 本博客为非营利性站点,所有资料供自己学习及娱乐之用,除本人在日志上所添加的"原创"二字外,本站所有内容都遵循创作共用协议,任何人都可以在不以商业盈利为目的的前提下自由转载,最终版权归作者本人所有! 本博客发布的所有信息资料都将尽可能注明出处.作者及日期,本人无意侵犯他人相关权益,如无意中侵犯了哪个媒体或个人的权益或知识产权,请留言或来信告之,本人将立即给予删除. 本博客转载文章出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性. 当本博客以链接形式推荐其他网站

Swift:简单封装一个工具类模板

创建模板类(封装一个类)新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var description: String var price: Double var stock: Int init(name: String, description: String, price: Double, stock: Int) { self.name = name self.description =

免责声明

各位大大好,我是一个小白,对技术有着浓厚的兴趣. 请原谅我编写的文档中可能会大量的摘抄他人的结论,实例等等,由于有很多是前期编写,或者是抽零散的时间写的,因此就没有注明原文作者. 如果我发布的文档因为没有注明相关结论或实例等真实来源,或者由其他原因侵犯了您的权益,我表示万分抱歉,请您与我联系,我会及时更正并做出相应补救措施,谢谢. 同时我保证会在以后的文档中一定添加相关原文链接,尊重原文作者成果,保障原文作者权益. 2014-11-14

Exchange Server 2010增加免责申明

最近一直在想要在公司的邮件服务器中增加免责申明,以保证员工所有发出的邮件均有公司自己的免责申请,应该还是有很多企业也是需要这项功能的,这里也把配置方法写下来,希望能对大家有所帮助: 1.打开EMC控制台,在"组织配置"/"集线器传输"页面中,选择"传输规则"/"新建传输规则",如下图所示: 2.在下图所示页面,输入规则名称,单击"下一步"按钮: 3.在下图所示页面中,选择"来自组织内部或外部&qu

Swift语言编写一个简单的条形码扫描APP

swift语言编写一个简单的条形码扫描APP 原文地址:appcoda 在处理职员在杂货店的收银台排了很长的队伍,在机场帮助检查背包和旅客,或者在主要的食品供应商,协助处理乏味的存货清单过程,条形码扫描是很简单的处理工具.实际上,他们已经用了这个办法来解决消费者在智能购物,图书分类,等其他目的.因此,让我们来制作一个iPhone版本的条形码扫描工具吧! 对我们来说幸运的是,苹果已经制作了条形码扫描的程序,实现它是一件很简单的事情.我们将要研究进入AV Foundation框架的世界,组建APP,

iOS开发——UI高级Swift篇&swift简单总结tableView

swift简单总结tableView 今天来总结一个很简单的问题,真心说出来丢脸,但是由于本人在写swift项目的时候总是发现Xib不能加载,而且不止一次,所以就简单的总结一下! 一:简单的使用缓存池 1.设置StoryBoard中cell的ID 2.在控制器的Cell中就可以直接使用ID创建了 1 override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UI

Swift简单入门教程:30分钟玩转Swift

通常来说,编程语言教程中的第一个程序应该在屏幕上打印“Hello, world”.在 Swift 中,可以用一行代码实现:    println("hello, world") 如果你写过 C 或者 Objective-C 代码,那你应该很熟悉这种形式——在 Swift 中,这行代码就是一个完整的程序.你不需要为了输入输出或者字符串处理导入一个单独的库.全局作用域中的代码会被自动当做程序的入口点,所以你也不需要main函数.你同样不需要在每个语句结尾写上分号. 这个教程会通过一系列编程

Swift 简单介绍 - 苹果最新的编程语言

Swift 真的能够说是最新的编程语言了,2014wwdc刚刚公布,以下来了解一下都有哪些特点. 首先感谢原作者,主要内容是借鉴他的,參考链接 http://zh.lucida.me/blog/an-introduction-to-swift/ 关于 这篇文章简要介绍了苹果于WWDC 2014公布的编程语言--Swift. 前言 在这里我觉得有必要提一下Bret Victor的Inventing on Principle.Swift编程环境的大部分概念都源自于Bret这个演讲. 接下来进入正题.