【iOS】present和push
【iOS】present和push
present和push的比较
-
present和push都用于iOS的视图切换,并且切换都是可逆的,原始视图不会被销毁,还可以直接更改window的rootViewController来切换视图,但是这种方法不可逆,并且原始视图会被销毁
-
present一般用于不同业务界面的切换,push一般用于同一业务不同界面的切换
-
present和dismiss对应,push和pop对应
-
present只能逐级返回,push有栈控制,但是可以返回任意级 ?
push方法
SecondViewController* secondViewController = [[SecondViewController alloc] init];
[self.navigationController pushViewController:secondViewController animated:YES];
pop方法
//返回上一级视图
[self.navigationController popViewControllerAnimated:YES];
//返回根视图
[self.navigationController popToRootViewControllerAnimated:YES];
//返回指定级数
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0]];
这里返回到指定级数的方法,是通过访问视图控制器属性来获得视图控制器数组,在这个数组中可以获得导航控制器的每一层视图,再调用popToViewController方法就可以回到指定级数的视图。
present方法
SecondViewController* secondViewController = [[SecondViewController alloc] init];
[self presentViewController:secondViewController animated:YES completion:nil];
dismiss方法
[self dismissViewControllerAnimated:NO completion:nil];
dismiss多级的方法
两个属性
在讲解dismiss多级视图控制器的方法之前,先来了解一下presentedViewController和presentingViewController这两个UIViewController的属性。
presentedViewController:The view controller that was presented by this view controller or its nearest ancestor. 由这个视图控制器或它最近的祖先呈现的视图控制器 presentingViewController:The view controller that presented this view controller (or its farthest ancestor.) 呈现此视图控制器(或其最远祖先)的视图控制器。
举个例子:如果B控制器是由A控制器present弹出的,那么:
A.presentedViewController = B;
B.presentingViewController = A;
dismiss多级
现在来实现A、B、C、D四个视图控制器通过dismiss来实现多级之间的跳转。假设A、B、C、D四个视图之间的跳转关系为A->B->C->D
由D视图dismiss到A视图
UIViewController *rootViewController = self.presentingViewController;
while (rootViewController.presentingViewController) {rootViewController = rootViewController.presentingViewController;
}
[rootViewController dismissViewControllerAnimated:YES completion:nil];
dismiss两级
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES];
也可以向前遍历来访问要dismiss的视图
UIViewController *ViewController = self.presentingViewController;
while (![ViewController isKindOfClass:[SecondViewController class]]) {ViewController = ViewController.presentingViewController;
}
[ViewController dismissViewControllerAnimated:YES completion:nil];
注意
这里的dismiss与我们以前常用的dismiss用法不同,以前都是被切换出的视图控制器调用dismiss方法来回到上一级视图控制器。而这里却是要回到哪一级视图控制器,就哪一级视图控制器调用dismiss方法。
那么dismissViewController到底在哪里执行呢?
其实,如果由A跳转到B,presentViewController方法在A里面执行,而dismissViewController也是A视图控制器来调用
苹果文档里的一段话: The presenting view controller is responsible for dismissing the view controller it presented. If you call this method on the presented view controller itself, it automatically forwards the message to the presenting view controller. 翻译如下: 呈现视图控制器负责解散它呈现的视图控制器。如果你在被呈现的视图控制器本身上调用这个方法,它会自动将消息转发给呈现的视图控制器。
什么意思呢?
其实就是如果在B中调用dismiss方法,dismiss方法会自动交给B的presentingViewController(也就是AViewController)来执行。
//在B中返回上一级
[self dismissViewControllerAnimated:NO completion:nil];
[self.presentingViewController dismissViewControllerAnimated:NO completion:nil];
//这两种写法效果一致
对于在A中执行dismiss从而实现多级跳转到A的解释如下:
苹果文档里的解释 If you present several view controllers in succession, thus building a stack of presented view controllers, calling this method on a view controller lower in the stack dismisses its immediate child view controller and all view controllers above that child on the stack. When this happens, only the top-most view is dismissed in an animated fashion; any intermediate view controllers are simply removed from the stack. The top-most view is dismissed using its modal transition style, which may differ from the styles used by other view controllers lower in the stack. 翻译如下: 如果你连续展示多个视图控制器,从而构建了一个由被展示的视图控制器组成的堆栈,那么在堆栈中较低位置的视图控制器上调用这个方法,会解除其直接子视图控制器以及该子视图控制器上方堆栈中的所有视图控制器。当这种情况发生时,只有最顶层的视图是以动画方式被解除展示的;任何中间的视图控制器都会直接从堆栈中移除。最顶层的视图使用其模态过渡样式来解除展示,该样式可能与堆栈中较低位置的其他视图控制器使用的样式不同。
也就是说,当present多个视图控制器时,系统维护了一个栈,栈中存放着A、B、C、D四个视图控制器。当在A中执行dismiss方法,栈中在A之上的视图就会被dismiss掉,不同的是,栈顶视图会以动画形式dismiss,而中间的视图控制器只是简单地remove掉。
相关文章:
【iOS】present和push
【iOS】present和push present和push的比较 present和push都用于iOS的视图切换,并且切换都是可逆的,原始视图不会被销毁,还可以直接更改window的rootViewController来切换视图,但是这种方法不可逆,并且原始视图会被销毁…...
Axure RP 9最新安装程序及汉化包下载(支持Win、Mac版,附下载安装教程)
数月前Axure RP官方已经发布了Axure RP 9的消息,并计划在今年夏天发布beta版本。新版Axure RP 9将是该工具向前迈出的重要一步,其中包括一系列广泛的改进:全面的UI修改,新的设计和文档功能以及前所未有的内部优化。我们已经彻底重…...
k8s环境搭建(续)
查看节点信息并做快照 kubectl get nodes 将components.yml文件上传到master主机 创建nginx,会在添加一个新的pod kubectl run nginx --imagesnginx:latest 查看nginx的pod信息 [rootk8s-master ~]# kubectl get po -Aowide|grep nginx 出现错误,查…...
kali——binwalk的使用
目录 前言 使用方法 分析文件 分离文件 前言 binwalk是一个用于分析、逆向工程和提取固件映像的工具。 binwalk能够分析固件映像文件,识别其中包含的文件。例如,它可以从一个设备固件中提取出压缩文件或图片等嵌入内容。 使用方法 分析文件 binwa…...
Ubuntu 24.04中安装virtualenv
在Ubuntu 24.04中安装virtualenv,可以按照以下步骤进行: 1. 确保Python已安装: 在终端中输入python --version或python3 --version来检查Python的安装情况。 python3 --version2. 安装pip(如果尚未安装)&#x…...
一个简约的uniapp登录界面,基于uniapp+vue3+uview-plus
uniapp-vue3-template 一个简约的uniapp登录界面,基于uniappvue3uview-plus 页面主要包括:用户登录,手机验证码登录,用户注册,重置密码等页面 登录进去后为空白模板 源码在文末 界面 源码 uniapp登录界面源码...
系统架构设计师 需求分析篇二
📘 面向对象分析方法 1. 用例模型 📈 构建用例模型一般需要经历 4 个阶段: 识别参与者 🔍:识别与系统交互的所有事物。合并需求获得用例 🔗:将需求分配给予其相关的参与者。细化用例描述 &am…...
IP 协议分析《实验报告》
目录 一、 实验目的 二、实验设备和环境 三、实验记录 1、实验环境搭建 2、IP 协议分析 1.设置抓包接口 2.IP 报文分析 3.报文长度计算 4.生存时间 TTL 5.分析总结 3、IP分片 1.IP 分片简介 2.捕获分组 3.结果分析 一、 实验目的 1、掌握 IP 协议数据报格式&…...
人工智能开发实战matplotlib库应用基础
内容导读 matplotlib简介绘制直方图绘制撒点图 一、matplotlib简介 matplotlib是一个Python 2D绘图库,它以多种硬拷贝格式和跨平台的交互式环境生成高质量的图形。 matplotlib 尝试使容易的事情变得更容易,使困难的事情变得可能。 我们只需几行代码…...
Android 源码集成可卸载 APP
android系统包含三类APP: 1、可自由卸载APP安装在 /data/app目录下。 2、系统APP放在 /system/app目录。 3、特权APP放在 /system/priv-app目录。 系统编译后,打包前, /data分区不起作用,因此系统打包前,可以先将APP全部拷贝到 /…...
cJSON-轻量级解析模块、字符串的神——编织STM32C8T6与阿里云信息传递的纽带
编写方向:本人就不泛泛的编写一篇什么一文学会cJSON了,没什么突出点,也就我水水字数,你们看来看去也不懂,本人是从上阿里云传信息接触的cJSON的,我就此写一篇针对性的文章,希望对大家有用&#…...
【Git】Clone
当git clone失败时,出现 RPC failed; curl 92 HTTP/2 stream 0 was not closed cleanly: CANCEL (err 8) 错误,可能由于网络连接不稳定或仓库太大导致的。 可以尝试以下几种方法来解决这个问题: 增加 Git 的缓冲区大小: git confi…...
web开发 之 HTML、CSS、JavaScript、以及JavaScript的高级框架Vue(学习版2)
一、前言 接下来就是来解决这些问题 二、 Ajax 1.ajax javscript是网页三剑客之一,空用来控制网页的行为的 xml是一种标记语言,是用来存储数据的 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-…...
【课程学习】信号检测与估计II
b站 文章目录 1-概述 1-概述 线性、正交、平稳、高斯 研究线性模型,采用正交化方法,假设信号平稳,考虑信号的统计特性是高斯的。 本学期考虑,非线性、非正交、非平稳、非高斯。 阵列处理 1980-1990 MUSIC 稀疏性 2006-2012 LASS 时…...
【深度学习|PyTorch】基于 PyTorch 搭建 U-Net 深度学习语义分割模型——附代码及其解释!
【深度学习|PyTorch】基于 PyTorch 搭建 U-Net 深度学习语义分割模型——附代码及其解释! 【深度学习|PyTorch】基于 PyTorch 搭建 U-Net 深度学习语义分割模型——附代码及其解释! 论文地址: https://arxiv.org/abs/1505.04597 代码地址&a…...
DPDK基础入门(十):虚拟化
I/O虚拟化 全虚拟化:宿主机截获客户机对I/O设备的访问请求,然后通过软件模拟真实的硬件。这种方式对客户机而言非常透明,无需考虑底层硬件的情况,不需要修改操作系统。 半虚拟化:通过前端驱动/后端驱动模拟实现I/O虚拟…...
OpenCV_图像旋转超详细讲解
图像转置 transpose(src, dst); transpose()可以实现像素下标的x和y轴坐标进行对调:dst(i,j)src(j,i),接口形式 transpose(InputArray src, // 输入图像OutputArray dst, // 输出 ) 图像翻转 flip(src, dst, 1); flip()函数可以实现对图像的水平翻转…...
关于 OceanBase 4.x 中被truncate的 table 不再支持进回收站的原因
近期,OceanBase的问答社区中收到了不少用户的询问,关于OceanBase 3.x版本支持被truncate的table进入回收站的功能,为何在升级到4.x版本后不再支持了?为了解答大家的疑惑,我们将通过这篇文章来浅析 OceanBase在4.x版本中…...
Numpy索引详解(数值索引,列表索引,布尔索引)
数值索引 数值索引类似列表索引操作使用[],参数为下标,[0,len-1),高维数组的索引使用多个[]连用分别代表一维索引,二维索引... import numpy as np import torchnp.random.seed(1) data1 np.arange(5) data2 np.arange(15).reshape(3,5) …...
大数据新视界 --大数据大厂之MongoDB与大数据:灵活文档数据库的应用场景
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
前端高级质感按钮复用指南
前端高级质感按钮复用指南为解决项目中按钮样式混乱、交互手感不一致的问题,我们沉淀了这套克制型高级质感按钮可复用方案。 它兼顾了高级视觉层次与真实物理交互手感,无需复杂定制即可快速在项目中落地,尤其适合顶部 Tab、筛选切换、状态标签…...
Unity URP SRP Batcher 完全指南 URP/HDRP 下的核心批处理机制,大幅降低 CPU 开销
SRP Batcher 是 Unity Scriptable Render Pipeline (SRP) 的核心优化技术,通过减少 CPU 与 GPU 之间的数据传输开销,显著提升渲染性能。本文将深入解析其工作原理、使用方法及最佳实践。一、什么是 SRP BatcherSRP Batcher 是 Unity 为 Scriptable Rende…...
2026-04-03 全国各地响应最快的 BT Tracker 服务器(联通版)
数据来源:https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1http://211.75.210.221:6969/announce江苏镇江联通222http://60.249.37.20:80/announce广东肇庆联通273udp://132.226.6.145:6969/announce宁夏银川联通724http://93.158.213.92:1337/announce…...
降AI率低至2%:SpeedAI科研小助手,论文过审省心利器
很多同学都在找能稳定过AIGC检测的工具,其实从 99.8% 到 14.9%:Paperxie AI 降重,破解论文 AIGC 检测的终极方案-CSDN博客这类分享里提到的核心需求,SpeedAI科研小助手都能更好地满足。一、写在前面:被AIGC检测支配的论…...
论文写作卡壳不用愁!这几款AI工具帮你高效赶稿
写论文最怕思路卡壳?大纲憋不出来、正文续写没头绪、降重改到崩溃,还担心AI生成痕迹过不了检测?以下几款实用AI写作工具直击本硕生核心需求,从初稿到答辩全流程辅助,让写作效率直接翻倍。 一、SpeedAI科研小助手&#…...
nba篮球数据项目书
import pandas as pd import randomdef get_2000_nba_players():"""生成2000条NBA球员数据(基于真实球员名 合理数据)100%成功,无需网络请求"""# 真实NBA球员名(前200名真实球员)real_…...
30美元实现AI视觉革命:OpenGlass开源智能眼镜的平民化方案
30美元实现AI视觉革命:OpenGlass开源智能眼镜的平民化方案 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 当商业智能眼镜以数千元价格将普通用户拒之门外时&…...
SClick进阶技巧:6个提升使用体验的实用功能
SClick是一款轻量级的防休眠工具,能够帮助用户解决Windows系统自动休眠带来的诸多不便。 软件体积仅有几十KB,绿色便携,无需安装,即用即走。 它通过模拟鼠标点击的方式,让系统以为用户一直在操作电脑,从而防…...
第四天(实习无忧)
##文件结束的判定,编译与链接##1.文件结束的判定:fgetc(pf)读取结束返回EOF,fgets(arr,100,pf)读取结束返回NULL,fread(arr,sizeof(int),n,pf)读取结束返回对应的n。而成功读取到文件尾结束可以用feof(pf)判断,若中途因…...
7B、14B、80B大模型参数量解析:性能、成本与选择全攻略!
本文解析了7B、14B、80B大模型参数量代表的含义及其对模型能力、资源消耗、训练与推理成本的影响。参数量越大,模型表达能力越强,但资源需求与成本也越高。7B适合轻量级任务与低预算场景,14B兼顾性能与成本,80B适用于追求顶尖性能…...
