效果:

 
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

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

  1. Swift - 简单封装一个工具类模板

    创建模板类(封装一个类) 例1:新建一个名字叫做 Product 的类 Product.swift File 的内容 class Product { var name: String var desc ...

  2. App免责声明

    一切移动客户端用户在下载并浏览xxxAPP软件时均被视为已经仔细阅读本条款并完全同意.凡以任何方式使用本APP,或直接.间接使用本APP资料者,均被视为自愿接受本网页相关声明和用户服务协议的约束. x ...

  3. 来自苹果的编程语言——Swift简单介绍

    关于 这篇文章简要介绍了苹果于WWDC 2014公布的编程语言--Swift. 原文作者: Lucida Blog 新浪微博 豆瓣 转载前请保留出处链接.谢谢. 前言 在这里我觉得有必要提一下Brec ...

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

    Swift 真的能够说是最新的编程语言了,2014wwdc刚刚公布,以下来了解一下都有哪些特点. 首先感谢原作者,主要内容是借鉴他的,參考链接 http://zh.lucida.me/blog/an- ...

  5. 来自苹果的编程语言——Swift简单介绍【整理】

    2014年06月03日凌晨,Apple刚刚公布了Swift编程语言,本文从其公布的书籍<The Swift Programming Language>中摘录和提取而成.希望对各位的iOS& ...

  6. 使用.NET简单实现一个Redis的高性能克隆版(三)

    译者注 该原文是Ayende Rahien大佬业余自己在使用C# 和 .NET构建一个简单.高性能兼容Redis协议的数据库的经历. 首先这个"Redis"是非常简单的实现,但是他 ...

  7. 最简单的一个Oracle定时任务

    最简单的一个Oracle定时任务一.在PLSQL中创建表:create table HWQY.TEST(CARNO     VARCHAR2(30),CARINFOID NUMBER) 二.在PLSQ ...

  8. Swift 简单的通讯录

    Swift 通讯录实战 1.功能需求 整个项目由三个界面构成:首页面(全部联系人),添加联系人界面和联系人详情界面 整个项目使用纯代码编程 数据处理方面使用一个工具类,处理所有数据的增删改查. 首页由 ...

  9. 在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程)

    在浏览器中简单输入一个网址,解密其后发生的一切(http请求的详细过程) 原文链接:http://www.360doc.com/content/14/1117/10/16948208_42571794 ...

随机推荐

  1. fedora如何删除某个包且不删除依赖它的相关包

    背景: 软件包编译过程中需要安装依赖,yum-builddep   SRPMS/xxx.src.rpm, 有时会遇到“多库版本保护”的问题,从而导致无法安装其他版本的依赖包 解决办法: rpm -e ...

  2. BZOJ1178或洛谷3626 [APIO2009]会议中心

    BZOJ原题链接 洛谷原题链接 第一个问题是经典的最多不相交区间问题,用贪心即可解决. 主要问题是第二个,求最小字典序的方案. 我们可以尝试从\(1\to n\)扫一遍所有区间,按顺序对每一个不会使答 ...

  3. http协议(四)http常用状态码

    一:http状态码 表示客户端http请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作 状态码的类别如下: http状态码种类繁多,大概有60多种,实际上经常使用的只有14种,下面为一 ...

  4. 20172306《Java程序设计》第四周学习总结

    20172306 <Java程序设计>第四周学习总结 教材学习内容总结 第四章: 1. 类和对象的回顾:除了看书,我还上网找了一下两者的一些区别. 2. 编写类时,了解到初始化.形式参数. ...

  5. 关于出现“对不起,您安装的不是正版应用...”的解决方法

    由于Discuz X版本增加了对插件的版本检测,在安装时,可能会出现:"对不起,您安装的不是正版应用,安装程序无法继续执行"的提示,如下图: 唱唱反调小编在此给大家分享解决方法: ...

  6. HTTP 1.0 Status Code Definitions

    part of Hypertext Transfer Protocol -- HTTP/1.1RFC 2616 Fielding, et al. 10 Status Code Definitions ...

  7. 【统一异常处理】@ControllerAdvice + @ExceptionHandler 全局处理 Controller 层异常

    1.利用springmvc注解对Controller层异常全局处理 对于与数据库相关的 Spring MVC 项目,我们通常会把 事务 配置在 Service层,当数据库操作失败时让 Service ...

  8. [vb.net]控制台进度条的示例

    Private Sub ConsoleProcessBar() Dim isBreak As Boolean = False Dim colorBack As ConsoleColor = Conso ...

  9. rbenv安装本地ruby安装包

    cd .rbenv mkdir cache #把安装包拷进cache cd cache rbenv install 版本号

  10. 使用Hadoop API 压缩HDFS文件

    下篇解压缩:使用Hadoop API 解压缩 HDFS文件 起因: 集群磁盘剩余空间不足. 删除了存储在HDFS上的,一定时间之前的中间结果,发现并不能释放太多空间,查看计算业务,发现,每天的日志存在 ...