使用QMUI实现用户协议对话框

news2025/2/4 5:01:55

使用QMUI实现用户协议对话框

懒加载用于初始化 TermServiceDialogController 对象。

懒加载 lazy var 的作用

lazy var dialogController: TermServiceDialogController = {
    let r = TermServiceDialogController()
    r.primaryButton.addTarget(self, action: #selector(primaryClick), for: .touchUpInside)
    return r
}()

1. 延迟初始化 (lazy)

​ • dialogController 是懒加载的,也就是说 只有第一次访问时才会创建 TermServiceDialogController 实例

​ • 这样可以节省内存和性能开销,避免未必要的对象初始化。

2. 自定义初始化过程

​ • 在 lazy 闭包中配置 dialogController 的属性:

r.primaryButton.addTarget(self, action: #selector(primaryClick), for: .touchUpInside)

这里为 primaryButton 按钮绑定了点击事件 primaryClick。

3. 返回配置完成的对象

​ • 返回已经配置好的 TermServiceDialogController 实例,供外部直接使用。

执行顺序

​ 1. 当你第一次访问 dialogController 时:

​ • 执行闭包内容,创建 TermServiceDialogController 对象。

​ • 为 primaryButton 绑定点击事件。

​ • 返回该对象。

​ 2. 之后的访问直接返回已经创建的实例,不再重复执行闭包。

调用示例

dialogController.show()  // 弹出对话框

点击 primaryButton 后触发 primaryClick 事件:

@objc func primaryClick() {
    print("Primary button clicked!")
}

为什么要用 lazy?

​ • 避免不必要的初始化,提升性能。

​ • 当 dialogController 未使用时,不会占用内存

​ • 可以在懒加载闭包中完成复杂的初始化和配置。

这种方式常用于配置复杂 UI 控件或管理弹窗对象。

关于 QMUIModalPresentationViewController 的作用

QMUIModalPresentationViewController 是 QMUI 框架 提供的一种模态弹框组件,它对系统原生的 UIViewController 的模态展示 (present) 进行了封装和增强,提供了更多的动画样式、布局控制以及弹框管理功能。

modalController.contentViewController = self

modalController 来管理整个弹窗布局。

具体视图层级:

QMUIModalPresentationViewController
└── TermServiceDialogController.view
    └── contentContainer (TGLinearLayout)
        ├── titleView (UILabel)
        ├── textView (UITextView)
        ├── primaryButton (QMUIButton)
        └── disagreeButton (QMUIButton)

设置弹窗大小

        //设置弹窗的大小
        view.tg_width.equal(.fill)
        view.tg_height.equal(.wrap)

内容容器

        //内容容器
        contentContainer = TGLinearLayout(.vert)
        contentContainer.tg_width.equal(.fill)
        contentContainer.tg_height.equal(.wrap)
        contentContainer.tg_space = 25
        contentContainer.backgroundColor = .white
        contentContainer.tg_gravity = TGGravity.horz.center
        //设置内容容器的边距
        contentContainer.tg_padding = UIEdgeInsets(top: PADDING_LARGE2, left: PADDING_LARGE2, bottom: PADDING_LARGE2, right: PADDING_LARGE2)
        contentContainer.tg_gravity = TGGravity.horz.center
        view.addSubview(contentContainer)

show函数

  func show() {
      modalController = QMUIModalPresentationViewController()

      //渐变效果
      modalController.animationStyle = .fade

      //点击外部不隐藏
      modalController.isModal = true

      //设置要显示的内容控件
      modalController.contentViewController = self

      modalController.showWith(animated: true) ;

  }

流程顺序

外界调用 dialog.show()

创建 QMUIModalPresentationViewController

配置动画、模态属性、内容控制器

modalController.showWith(animated: true)

将 contentViewController.view(即 dialog.view)添加到弹窗内容

执行淡入动画并展示弹窗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2291610.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Windows7和Windows10下从零搭建Qt+Leaflet开发环境】

Windows7和Windows10下从零搭建QtLeaflet开发环境 本文开始编写于2025年1月27日星期一(农历:腊月二十八,苦逼的人,过年了还在忙工作)。 第一章 概述 整个开发环境搭建需要的资源: 操作系统 Windows7_x6…

关于MySQL InnoDB存储引擎的一些认识

文章目录 一、存储引擎1.MySQL中执行一条SQL语句的过程是怎样的?1.1 MySQL的存储引擎有哪些?1.2 MyIsam和InnoDB有什么区别? 2.MySQL表的结构是什么?2.1 行结构是什么样呢?2.1.1 NULL列表?2.1.2 char和varc…

WSL2中安装的ubuntu开启与关闭探讨

1. PC开机后,查询wsl状态 在cmd或者powersell中输入 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 22. 从windows访问WSL2 wsl -l -vNAME STATE VERSION * Ubuntu Stopped 23. 在ubuntu中打开一个工作区后…

π0:仅有3B数据模型打通Franka等7种机器人形态适配,实现0样本的完全由模型自主控制方法

Chelsea Finn引领的Physical Intelligence公司,专注于打造先进的机器人大模型,近日迎来了一个令人振奋的里程碑。在短短不到一年的时间内,该公司成功推出了他们的首个演示版本。这一成就不仅展示了团队的卓越技术实力,也预示着机器…

pandas(二)读取数据

一、读取数据 示例代码 import pandaspeople pandas.read_excel(../002/People.xlsx) #读取People数据 print(people.shape) # 打印people表的行数、列数 print(people.head(3)) # 默认打印前5行,当前打印前3行 print("") print(people.tail(3)) # 默…

向上调整算法(详解)c++

算法流程: 与⽗结点的权值作⽐较,如果⽐它⼤,就与⽗亲交换; 交换完之后,重复 1 操作,直到⽐⽗亲⼩,或者换到根节点的位置 这里为什么插入85完后合法? 我们插入一个85,…

LabVIEW无线齿轮监测系统

本案例介绍了基于LabVIEW的无线齿轮监测系统设计。该系统利用LabVIEW编程语言和改进的天牛须算法优化支持向量机,实现了无线齿轮故障监测。通过LabVIEW软件和相关硬件,可以实现对齿轮箱振动信号的采集、传输和故障识别,集远程采集、数据库存储…

力扣第435场周赛讲解

文章目录 题目总览题目详解3442.奇偶频次间的最大差值I3443.K次修改后的最大曼哈顿距离3444. 使数组包含目标值倍数的最少增量3445.奇偶频次间的最大差值 题目总览 奇偶频次间的最大差值I K次修改后的最大曼哈顿距离 使数组包含目标值倍数的最少增量 奇偶频次间的最大差值II …

内存四区

一、内存四区模型 1. 操作系统把物理硬盘代码load到内存 2. 操作系统把c代码分成四个区 3. 操作系统遭到main函数入口执行 二、内存四区 1. 栈区(stack) 由编译器自动分配释放,存放函数的参数值,局部变量的值。其操作方式类似…

大模型综合性能考题汇总

- K1.5长思考版本 一、创意写作能力 题目1:老爸笑话 要求:写五个原创的老爸笑话。 考察点:考察模型的幽默感和创意能力,以及对“原创”要求的理解和执行能力。 题目2:创意故事 要求:写一篇关于亚伯拉罕…

租赁管理系统在促进智能物业运营中的关键作用和优化策略分析

租赁管理系统在智能物业运营中的关键作用与优化策略 随着科技的飞速发展,租赁管理系统在智能物业运营中扮演着越来越重要的角色。这种系统不仅提高了物业管理的效率,更是促进了资源的优化配置和客户关系的加强。对于工业园、产业园、物流园、写字楼和公…

【论文复现】基于Otsu方法的多阈值图像分割改进鲸鱼优化算法

目录 1.摘要2.鲸鱼优化算法WOA原理3.改进策略4.结果展示5.参考文献6.代码获取 1.摘要 本文提出了一种基于Otsu方法的多阈值图像分割改进鲸鱼优化算法(RAV-WOA)。RAV-WOA算法能够在分割灰度图像和彩色图像时,自动选择最优阈值,并确…

关于系统重构实践的一些思考与总结

文章目录 一、前言二、系统重构的范式1.明确目标和背景2.兼容屏蔽对上层的影响3.设计灰度迁移方案3.1 灰度策略3.2 灰度过程设计3.2.1 case1 业务逻辑变更3.2.2 case2 底层数据变更(数据平滑迁移)3.2.3 case3 在途新旧流程兼容3.2.4 case4 接口变更3.2.5…

电介质超表面中指定涡旋的非线性生成

涡旋光束在众多领域具有重要应用,但传统光学器件产生涡旋光束的方式限制了其在集成系统中的应用。超表面的出现为涡旋光束的产生带来了新的可能性,尤其是在非线性领域,尽管近些年来已经有一些研究,但仍存在诸多问题,如…

学习日记-250202

现在开始要继续写我的日记了......(也可以当作笔记吧) 一.论文 Prompt Transfer for Dual-Aspect Cross Domain Cognitive Diagnosis 主要内容: 主要是加入prompt提示, 为重叠实体设计个性化的提示,为非重叠实体设计共…

【Rust自学】16.3. 共享状态的并发

喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 16.3.1. 使用共享来实现并发 还记得Go语言有一句名言是这么说的:Do not communicate by sharing memory; instead, share me…

LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略

LLMs之DeepSeek:Math-To-Manim的简介(包括DeepSeek R1-Zero的详解)、安装和使用方法、案例应用之详细攻略 目录 Math-To-Manim的简介 1、特点 2、一个空间推理测试—考察不同大型语言模型如何解释和可视化空间关系 3、DeepSeek R1-Zero的简介:处理更…

2025年2月2日(网络编程 tcp)

tcp 循环服务 import socketdef main():# 创建 socket# 绑定tcp_server socket.socket(socket.AF_INET, socket.SOCK_STREAM)tcp_server.bind(("", 8080))# socket 转变为被动tcp_server.listen(128)while True:# 产生专门为链接进来的客户端服务的 socketprint(&qu…

WSL2中安装的ubuntu搭建tftp服务器uboot通过tftp下载

Windows中安装wsl2,wsl2里安装ubuntu。 1. Wsl启动后 1)Windows下ip ipconfig 以太网适配器 vEthernet (WSL (Hyper-V firewall)): 连接特定的 DNS 后缀 . . . . . . . : IPv4 地址 . . . . . . . . . . . . : 172.19.32.1 子网掩码 . . . . . . . .…

2025-工具集合整理

科技趋势 github-rank 🕷️Github China/Global User Ranking, Global Warehouse Star Ranking (Github Action is automatically updated daily). 科技爱好者周刊 制图工具 D2 D2 A modern diagram scripting language that turns text to diagrams 文档帮助 …