首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift & UILabel:我们如何制作条款和条件的内联可点击文本?

在Swift中,要制作条款和条件的内联可点击文本,可以使用UILabel和NSAttributedString来实现。下面是一个简单的示例代码:

代码语言:txt
复制
import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var termsLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()

        let termsText = "我已阅读并同意《服务条款》和《隐私政策》"
        let attributedText = NSMutableAttributedString(string: termsText)

        // 设置《服务条款》可点击
        let termsRange = (termsText as NSString).range(of: "《服务条款》")
        attributedText.addAttribute(.link, value: "https://www.example.com/terms", range: termsRange)

        // 设置《隐私政策》可点击
        let privacyRange = (termsText as NSString).range(of: "《隐私政策》")
        attributedText.addAttribute(.link, value: "https://www.example.com/privacy", range: privacyRange)

        termsLabel.attributedText = attributedText
        termsLabel.isUserInteractionEnabled = true
        termsLabel.numberOfLines = 0

        let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleTap(_:)))
        termsLabel.addGestureRecognizer(tapGesture)
    }

    @objc func handleTap(_ gesture: UITapGestureRecognizer) {
        guard let text = termsLabel.attributedText?.string else {
            return
        }

        let tapLocation = gesture.location(in: termsLabel)
        let textStorage = NSTextStorage(attributedString: termsLabel.attributedText!)
        let layoutManager = NSLayoutManager()
        textStorage.addLayoutManager(layoutManager)

        let textContainer = NSTextContainer(size: termsLabel.bounds.size)
        textContainer.lineFragmentPadding = 0
        textContainer.maximumNumberOfLines = termsLabel.numberOfLines
        textContainer.lineBreakMode = termsLabel.lineBreakMode
        layoutManager.addTextContainer(textContainer)

        let characterIndex = layoutManager.characterIndex(for: tapLocation, in: textContainer, fractionOfDistanceBetweenInsertionPoints: nil)

        guard let attributedText = termsLabel.attributedText, characterIndex < attributedText.length else {
            return
        }

        let linkAttribute = attributedText.attribute(.link, at: characterIndex, effectiveRange: nil)
        if let url = linkAttribute as? URL {
            // 在这里打开链接
            UIApplication.shared.open(url)
        }
    }
}

在上述代码中,我们首先创建一个UILabel,并设置其numberOfLines属性为0以支持多行文本显示。然后,我们使用NSMutableAttributedString创建了一个富文本字符串,并为"《服务条款》"和"《隐私政策》"两个部分设置了可点击的链接。接着,我们将创建好的富文本字符串赋值给UILabel的attributedText属性。

为了使UILabel可点击,我们需要将isUserInteractionEnabled属性设置为true,并为UILabel添加一个UITapGestureRecognizer手势识别器。在手势识别的回调方法中,我们首先获取点击的位置和UILabel的文本内容。然后,我们创建了NSTextStorage、NSLayoutManager和NSTextContainer等对象来辅助计算点击位置对应的字符索引。最后,我们从富文本字符串中获取点击位置的链接,并打开该链接。

这样,我们就实现了在UILabel中制作条款和条件的内联可点击文本。

腾讯云相关产品和产品介绍链接地址:腾讯云没有特定与UILabel相关的产品,但腾讯云提供了广泛的云计算和相关服务,可以通过以下链接了解更多信息:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Ios常用第三方框架(一)

refresher - swift,上拉下拉刷新。 展开/收缩下拉菜单--SvpplyTable - 一个展开可收缩下拉菜单,类似Svpply app。...在代码中纯手工创建约束灰常痛苦,但幸运我们有了SnapKit,在board中用上它,你可以简单直观地编写约束了。...富文本 TFHpple- TFHpple 解析html轻量级框架 RTLabel - RTLabel 基于UILabel拓展,能够支持Html标记文本显示,它是基于Core Text,因此也支持...FXLabel - FXLabel是一个功能强大使用简单类库,通过提供一个子类改进了标准UILabel组件,为字体增加了阴影、内阴影渐变色等,可以被用在任何标准UILabel中。...RichEditorView - swift,一套定制富文本编辑器组件及示例。

5.4K31

初探 Core ML:学习建立一个图像识别 App

注: 接下来教学会使用 Xcode 9 作为开发工具,同时需要有 iOS 11 设备以便测试其中功能。Xcode 9 支持 Swift 3.2 及 4.0,我们使用 Swift 4.0 开发。...如此一来一般开发者们也将能够制作出图像识别、语言处理、输入预测等等功能。 听起来是不是很酷呢?让我们开始吧。 示例 App 概览 接下来要制作 App 相当地简单。...xcode9-new-proj 制作使用者介面 编注: 如果不想重头开始制作UI的话,你可以下载 后,直接阅读关于 Core ML 实作段落 一开始我们要做是打开 Main.storyboard 然后加入几个...现在轮到 UILabel,将其放入到 View 底部并延伸两端到 View 两侧。这样我们完成这个 App UI 了。...这个模型类别(Inceptionv3)是由机器学习模型中产生出来并且可以让我们直接在代码里使用。如果点击 Inceptionv3 旁箭头,你可以看到这个类别的原始码。 ?

2.8K70
  • Swift| 基础语法(五)

    前言 总结下 swift基础语法,里面涉及到:常量&变量、Swift数据类型、逻辑分支、循环、字符串相关、数组字典、方法书写调用等内容,考虑到阅读体验分多篇来展示,希望对大家学习swift...Swift| 基础语法(一) Swift| 基础语法(二) Swift| 基础语法(三) Swift| 基础语法(四) Swift| 基础语法(五) 本文涉及: 纯代码创建应用根试图 UILabel...} 在Swift中,创建tableViewCell方法可以分为两种创建tableView时候注册需要使用时手动创建。先聊聊创建tableView时候直接注册cell: myTb?....可以在自定义cell中处理点击状态下显示 var label1 :UILabel? var label2 :UILabel?...,选中是蓝色,下面修改成橙色: //图片文字一起变色 self.tabBar.tintColor = UIColor.orangeColor() 如何显示原始图片颜色图案?

    2K30

    教你如何自定义AlertView

    前言: 系统自带alertView界面有点呆板,动画有点单一,总之随着业务发展,系统自带alertView已经很难满足我们需求,那自定义就很有必要。...本文就介绍如何自定义alertView,看完你就懂得制作属于自己alertView了 一、创建DWAlert.swift 创建一个类名为在DWAlert.swift,在class DWAlert:...UIView里面添加一些常量属性 //const 常量 let kAlertWidth = 245.0 let kAlertHeight = 160.0 let kTitleYOffset = 15.0...上面代码const是为了定义弹出框需要坐标长宽,由于是不变,所有let修饰,与OC中常量类似 二、绘制alertView 写一个继承init方法,把title(alert标题),content...五、使用DWAlert 在ViewController创建一个按钮,并添加一个点击事件ClickMe,在方法里面创建alertView @IBAction func ClickMe(_ sender:

    1.3K50

    精品资源汇总:(持续更新)

    点击上方蓝字关注我们 引言 欢迎大家来到#公众号:iOS逆向《精品资源汇总》目录 本文列出最受欢迎资源,以便供大家快速查找自己所需资料 文中蓝字都是超级链接,点击进入即可 I、iOS自定义视图相关热门资源...刷新界面数据 2、刷新数据当同时旋转tabbar图片 从CSDN下载完整地址demo :https://download.csdn.net/download/u011018979/15504711...3、特色功能:在更新数据期间旋转tabbaricon blink https://blink.csdn.net/details/1175811 VI 、HTML字符串与富文本互转 HTML字符串与富文本互转...5、我已加入CSDN内容合伙人计划,亲爱各位粉丝,可以添加我CSDN官方微信号,和我近距离互动聊天,为您答疑解惑 #公众号:iOS逆向 CSDN认证博客专家 Swift SwiftUI Objective-C...微信公众号:【iOS逆向】 iOS逆向与安全,熟悉iphone/tweak、iphone/tool、cydiarepo 制作 、cocoapodsSpecs repo制作(using-pod-lib-create

    1K30

    声明式 UIKit 在有赞美业实践

    然而有赞美业是有赞最早迁移到 Swift 项目,迁移 Swift代码,对 C++ 兼容其实有一定局限性,若过多使用 C++,在代码中也不能体现 Swift 优雅性。...基于上述问题,我们决定自己封装基于 Swift 声明式 UI 开发框架。...$0) .text("测试Button", state: .normal) } 基于 Swift 简洁语法,我们可以很简单地设计出基于结构化 API 设计。...2.3 数据交互设计 UIKit 本身设计为 MVC 模式,以命令形式对 UI 进行修改等操作。这就需要我们在所有响应操作(比如点击,网络回调)之后,获取到相应 View 进行修改。...计算机用户界面开发目的,其实就是解决人与机器之间输入输出操作,通过点击滑动等操作将事件进行输入,通过 UI 状态改变将信息输出。

    1.4K30

    RxSwift 实战操作【注册登录】

    然后我们来分析下各个界面的需求: 注册界面需求: 输入用户名必须大于等于6个字符,不然密码不能输入; 密码必须大于等于6个字符,不然重复密码不能输入; 重复密码密码必须一样, 不能注册按钮不能点击;...我们考虑到当文本框内容变化时候,我们需要把文本内容当做参数传递进来进行处理,判断是否符合我们要求,然后返回处理结果,也就是状态。...UILabel进行了UIBingObserver,根据result结果,进行它texttextColor显示 我们对UITextField进行了UIBingObserver,根据result结果,对它...登录界面 首先我们在storyboard中添加登录界面,如下,当点击登录时候,就跳转到登录界面。 ?...创建一个LoginViewController.swiftLoginViewModel.swift文件,有了上述注册功能讲解,相信登录功能也很容易了。

    4.9K60

    WWV 2018年十大必看视频

    Siri Shortcuts WWDC 2018简介 [视频链接] “Siri Shortcuts潜力几乎是无限。正确实施,这是iOS设备使用方式以及我们如何考虑制作应用程序范式转变。...您还可以输入一些数据来测试预测准确性。如果您对自己制作模型感到满意,请将其导出。最后,将新模型拖到项目中。您可以在Swift命令行REPL中macOS Mojave上训练模型。...条件一致性扩展或增加了符合它协议和类型可组合性。 Swift还支持面向对象编程。...特别是,新自定义Playgrounds显示转换器允许您在实时REPL类似的结果内联视图中显示您自己自定义值。他还强调了如何在项目中支持自己框架。...他通过一个案例研究,了解如何滥用干净但效率低下代码会对扩展性性能造成严重影响。

    2.8K20

    Swift:静态工厂方法

    swift: 静态工厂方法 视图 Views 视图是我们在编写UI代码时必须设置最常见对象之一。...iOS上UIKitMac上AppKit都为我们提供了创建具有原生外观UI所需所有基本核心构建块,但是我们经常需要自定义这些外观以适合我们设计并为其定义布局。...() } 如果我们想使API更加简约(Swift在很多方面都鼓励使用点语法以及它如何缩短导入Objective-C API功能),我们甚至可以将我们方法变成一个计算属性,如下所示: extension...如果您想了解有关此类对象以及我通常使用工厂模式其他方式更多信息,请查看"Swift:使用工厂模式以避免共享状态","Swift:使用工厂进行依赖注入""Swift: 使用懒加载属性"。...文章来自 John SundellStatic factory methods in Swift简单翻译了一下,希望对大家有用 附: 文中静态工厂方法swift5.0才支持 我们也可以使用类方法实现类似功能

    2.4K10

    WWDC 2018年十大视频评论

    Siri Shortcuts WWDC 2018简介 [视频链接] “Siri Shortcuts潜力几乎是无限。正确实施,这是iOS设备使用方式以及我们如何考虑制作应用程序范式转变。...您还可以输入一些数据来测试预测准确性。如果您对自己制作模型感到满意,请将其导出。最后,将新模型拖到项目中。您可以在Swift命令行REPL中macOS Mojave上训练模型。...条件一致性扩展或增加了符合它协议和类型可组合性。 Swift还支持面向对象编程。...TJ Usiyan概述了更高级Playground功能。特别是,新自定义游乐场显示转换器允许您在实时REPL类似的结果内联视图中显示您自己自定义值。他还强调了如何在项目中支持自己框架。...他通过一个案例研究,了解如何滥用干净但效率低下代码会对扩展性性能造成严重影响。

    3.3K20

    聊天机器人教学:使用Dialogflow (API.AI)开发 iOS Chatbot App

    在本教程中,我们将创建一个帮助你预订hotel机器人。...Dialogflow 系统会要求你使用Google帐户登录,并授权使用Dialogflow在Google云端平台服务中查看管理你资讯,接受条款,你应该看到一个初始啟动页面。...,以及更热门问题”你愿意嫁给我吗?” 现在你已经知道Dialogflow是什么,并且对于如何操作有很好观念了,现在是时候移动到另一端,开始编写Swift代码!...进入Main.storyboard,已经有一个UILabel,UIButtonUITextField,它们outlets也连接到ViewController.swift。...基本上,我们以用户提供query条件来準备API.AI文本请求,从messageField中检索文本并执行基本验证,确保文本字段不是空白,一旦我们得到了这段text,就将它丢给requestquery

    4.6K30

    ​使用SwiftXcode开发iOS应用详细教程

    iOS应用开发是一项充满创意挑战工作,而Swift作为苹果公司推崇编程语言,Xcode则是官方提供集成开发环境。...在本篇博客中,我们将一步步地介绍如何使用SwiftXcode创建一个简单iOS应用。我们将涵盖项目的创建、界面设计、Swift代码编写以及应用运行。让我们开始这个令人兴奋开发之旅!...在模板选择中,选择“App”并点击“Next”。选择“Single View App”模板并点击“Next”。填写项目的名称、组织标识符等信息,确保语言选择为Swift。...@IBOutlet weak var myLabel: UILabel!...}}在这个例子中,我们假设已经在Main.storyboard中创建了一个按钮一个标签,并将它们分别关联到ViewController.swift文件中myButtonmyLabel属性。

    1.2K10

    博客帮助文档

    我们有专门编辑负责从中筛选优质内容,并推荐到CSDN首页或其他内容频道。...网站造成不良影响等,将永久取消其CSDN博客专家身份;希望恢复博客专家身份重新申请,点击这里申请博客专家。...”,待达到上述条件之后,再转为正式博客专家(申请用户自成为“特约专家”后六个月内如仍未达到CSDN博客专家应具备条件,则“特约专家”身份取消)。...如何开通企业博客 ---- 企业博客已经开通在线申请功能,点击这里开通企业博客 CSDN管理员在收到您申请后,会在2个工作日内开通服务。...用户如不同意相关条款修改,立即停止访问或使用CSDN博客或取消已经获得服务;如用户选择在本准则修改后继续访问或使用CSDN博客,则视为用户已接受相关条款修改。

    1.4K30

    实现更安全、高扩展自定义键盘 非UIButton

    当然这只是一款软件,一种情况,所谓防小人不妨君子,我们需要更安全键盘 当前网上许多键盘都是通过 UIButton 堆起来,这样事件控制方便,title 设置便利,UI设计简易,不用考虑触摸事件等等诸多好处...相对更加安全,并不是绝对安全,请理解 “更加安全” 这个关键字 完善 由于当前时间比较少,只是设计了几款常用键盘,需要完善地方还是有很多,请同学多提建议 已完成: 自定义每个按键,就是可以定义按键模板...所有按键基类 暴漏给子类按键,重写按键高亮正常态方法 KKeyBoardNormalView 已实现普通文本按键。可以直接使用。...字母键盘、身份证有效期键盘、身份证号键盘、数字键盘 已经实现了几种按键 数字按键、文本按键、删除按键 可以理解为 Demo,可以仿照写法自定义按键键盘 */ public enum KKeyBoardType...身份证号键盘 源码在 我github 上 【注】请使用 Swift 3 运行

    77520

    文本AttributedString总结

    本文语法为Swift4 前言 AttributedString可以分为NSAttributedStringNSMutableAttributedString两种。...在使用中通过将AttributedString赋值给控件 attributedText 属性来添加文字样式。 可设置控件有UILabel、UITextFieldUITextView。...更准确点说是在UILabel UITextField 中无法实现点击链接启动浏览器打开一个URL地址,因为在此过程中用到了一个代理函数。只能用在 UITextView 中。...return YES; } 注意: 实现textView代理,否则调不到回调方法。 设置textView editable 属性为 NO,在可编辑状态下是不可点击。...在模拟器环境下一直无法点击,在真机上是正常,不知道是不是模拟器不支持。 OC代码 原文地址

    3.3K20

    Swift纯代码走进UICollectionView

    2.jpg Swift对于一门新iOS编程语言,他崛起是必然 我们这群老程序员们学习新技能也是必然 不接受新技能将被这大群体无情淘汰 So 我欣然接受这门看似不成熟语言 下面我们说说...Swift中比较常见控件UICollectionView 首先我们设置一个全局UICollectionView一个数据源 var colltionView : UICollectionView...//cell上图片 var titleLabel:UILabel?//cell上title var priceLabel:UILabel?...接下来就看我我们点到我们继承UICollectionReusableView里面去看里面有些什么方法 功夫不负有心人,?...更多经验请点击 原文在:http://www.allluckly.cn/ 最终效果图如下 Swift_CollTionView.gif 推荐一款学习iOS开发app_____|___

    3.2K20

    iOS 9 Storyboard 教程(一下)

    现在Table View Controller有一个空原型cell.点击原型cell,你可以在Attributes inspector中设置它样式(Style)副标题(Subtitle)....在storyboard中有很多堆叠内容,但有时却很难点击你想确切操作内容.如果你遇到麻烦,下面有几个选项可以帮你.第一个就是在左侧Document Outline里,你可以选择这个item.第二个是一个方便热键...选择Swift语言,然后点击下一步(Next)创建. ?...在Document Outline里Command + 点击Stack ViewImage View.选择Editor\Embed in\Stack View.Xcode将会创建一个新水平 stack...tableView(tableView:heightForRowAtIndexPath:) 方法.前者是更适用这种情况,因为我们只拥有一种类型cell,并且我们事先知道cell高度. ---- Note

    3K20

    设计模式之创建型模式

    《设计模式》一书副标题是“复用面向对象软件基础”,所以显然这23个设计模式是用于面向对象软件设计,而众所周知,最适合面向对象这种范式领域其实是 GUI 编程领域(这也是《设计模式》中大部分应用实例都是一些...创建型模式简介 创建型模式将实例化对象部分从系统中独立出来,它们将系统具体使用哪些类信息封装起来,并隐藏了这些类是如何被创建和组合,对外只提供一个通用接口。...一个简单案例 假设我们现在要构建两个界面,界面的构成元素都是一个 Label Button。...Factory Method(工厂方法) 现在我们给 PageView 加上用来创建 Label Button 工厂方法,并在构造器中调用工厂方法。...这时候如果是支持范型语言,就可以使用范型参数来解决这个问题(前提是工厂方法中没有针对某个特定子类产品操作),我们把 PageView 改成一个范型类: class PageView<L: UILabel

    65540
    领券