当前位置: 首页 > news >正文

【iOS】dismiss多级的方法

前言

上次笔者总结过push和pop推入和推出界面的方法,这里对于dismiss多级的方法进行一个总结,推入推出方法可以看看笔者这篇博客:【iOS】UI学习——界面切换

dismiss推出多级的原理

当我们使用pop推入新的界面的时候,连续pop推入时,就会建立一个视图控制器堆栈,则在堆栈中较低的视图控制器上调用此方法会解除其直接子视图控制器和堆栈中该子级以上的所有视图控制器。当发生这种情况时,只有最上面的视图以动画的方式被取消;任何中间视图控制器都只是从堆栈中删除。最上面的视图将使用其模态转换样式来消除,这可能与堆栈中较低的其他视图控制器使用的样式不同。(摘自Apple文档描述)
所以,当我们dismiss多级的时候,就是将位于栈顶的视图控制器一层层删除,直到到达显示的视图控制器。在这里我们首先要明确两个概念,**当使用present推入一个新的视图控制器的时候,我们设定为A推入B,那么A.presentedViewController就是B视图控制器,B.presentingViewController就是A。**经过上面的描述,我们就可以来使用B.presentingViewController来dismiss多级了。


举例展示

首先我们创建A、B、C、D四个视图控制器,然后我使用这四个视图控制器来演示dismmis多级的方法
展示:
从任意一层到A:这里以D->A为例:

     UIViewController *VC = self.presentingViewController;while  (VC. presentingViewController ) {VC = rootVC.presentingViewController ;}[VC dismissViewControllerAnimated:YES completion:nil];

从D->B:

-(void) press
{[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
}

当我们返回前几层视图控制器的时候就可以使用这个方法self.presentingViewCOntroller.presentingViewCOntroller


当需要dismiss多级时,也可以使用while循环来dismiss多级:

-(void) press
{UIViewController* VcRoot = self.presentingViewController;while([VcRoot isKindOfClass:[VCtwo class]]){VcRoot = VcRoot.presentingViewController;}[VcRoot dismissViewControllerAnimated:YES completion:nil];
}

这个方法就比上面的更加方便和美观,笔者个人观点,当然两种都可以使用


效果图
在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Xilinx系FPGA学习笔记(九)DDR3学习
  • Gitee注册-添加公钥-建立本地仓库
  • 原生 input 中的 “type=file“ 上传文件
  • LeetCode 每日一题 2024/9/9-2024/9/15
  • Linux常见查看文件命令
  • 国产化中间件正在侵蚀开源中间件
  • 二叉搜索树(Java实现)
  • 【智路】智路OS Airos Edge 2.0 Quick Start
  • Golang | Leetcode Golang题解之第403题青蛙过河
  • 【VUE】快速上手
  • 【接口测试】Postman--变量与集合
  • Java入门程序-HelloWorld
  • 在 Linux 系统中目录架构说明
  • 算法之搜索--最长公共子序列LCS
  • 传输层协议 —— UDP协议
  • SegmentFault for Android 3.0 发布
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • Asm.js的简单介绍
  • Java的Interrupt与线程中断
  • Netty源码解析1-Buffer
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 那些年我们用过的显示性能指标
  • mysql面试题分组并合并列
  • Salesforce和SAP Netweaver里数据库表的元数据设计
  • ​RecSys 2022 | 面向人岗匹配的双向选择偏好建模
  • # include “ “ 和 # include < >两者的区别
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • $$$$GB2312-80区位编码表$$$$
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (20)docke容器
  • (2024最新)CentOS 7上在线安装MySQL 5.7|喂饭级教程
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (Oracle)SQL优化基础(三):看懂执行计划顺序
  • (二)换源+apt-get基础配置+搜狗拼音
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (六)Flink 窗口计算
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (十一)图像的罗伯特梯度锐化
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转) Face-Resources
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • (转)IOS中获取各种文件的目录路径的方法
  • **《Linux/Unix系统编程手册》读书笔记24章**
  • ../depcomp: line 571: exec: g++: not found
  • .bat批处理出现中文乱码的情况
  • .JPG图片,各种压缩率下的文件尺寸
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .NET/C# 编译期间能确定的相同字符串,在运行期间是相同的实例
  • .NET连接MongoDB数据库实例教程
  • @AliasFor注解
  • @Autowired注解的实现原理
  • @Import注解详解