1. 设置富文本,超链接点击
2. 取消一切点击事件(放大镜/复制粘贴/删除等等)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | /// 同意协议view class TGSLoginAgreeView: UIView, UITextViewDelegate { ///点击类型 enum ClickLinkType { ///用户协议 case userProtocol ///隐私条款 case privacyPolicy } ///点击事件 var clickHandle:((_ clickType:ClickLinkType)->())? ///同意View private lazy var agreeTextView : UITextView = { let textStr = "登录既代表您已同意《用户协议》和《隐私条款》" let textView = UITextView() textView. delegate = self textView.font = TGSPingFangFontTool.getPingFangFont(13, .regular) textView.textColor = UIColor.colorWithHexString( "#666666" ) textView.textAlignment = .center ///设为true 在代理里面禁掉所有的交互事件 textView.isEditable = true textView.autoresizingMask = UIView.AutoresizingMask.flexibleHeight textView.isScrollEnabled = false let attStr = NSMutableAttributedString( string : textStr) //点击超链接 attStr.addAttribute(NSAttributedString.Key.link, value: "userProtocol://" , range: (textStr as NSString).range(of: "《用户协议》" )) //点击超链接 attStr.addAttribute(NSAttributedString.Key.link, value: "privacyPolicy://" , range: (textStr as NSString).range(of: "《隐私条款》" )) textView.attributedText = attStr ///只能设置一种颜色 textView.linkTextAttributes = [ NSAttributedString.Key.foregroundColor: UIColor.colorWithHexString( "#FF4555" ) ] return textView }() override init(frame: CGRect) { super.init(frame: frame) configUI() } required init?(coder: NSCoder) { fatalError( "init(coder:) has not been implemented" ) } } extension TGSLoginAgreeView{ func textViewShouldBeginEditing(_ textView: UITextView) -> Bool { return false } func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange, interaction: UITextItemInteraction) -> Bool { if URL.scheme == "userProtocol" { self.clickHandle?(.userProtocol) return false } else if URL.scheme == "privacyPolicy" { self.clickHandle?(.privacyPolicy) return false } return true } } extension TGSLoginAgreeView{ private func configUI(){ ///同意view self.addSubview(agreeTextView) agreeTextView.snp.makeConstraints { (make) in make.edges.equalToSuperview() } } } |
参考:
UITextView禁用复制粘贴放大
https://blog.csdn.net/Lu_Ca/article/details/53744938?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-2.not_use_machine_learn_pai
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-11-20 swift -2018 - 创建PCH文件
2018-11-20 swift - 正则表达式
2018-11-20 swift - 启动APP 黑屏