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

【iOS】push和pop、present和dismiss

目录

  • 前言
  • push和pop
    • push
    • pop
  • present和dismiss
    • present
    • dismiss
    • 实现模态对话框代码示例
  • 区别
  • 总结

前言

  push 和 present 是两种用于导航和切换视图控制器(ViewController)的常用方法,push与present都可以推出新的界面,present与dismiss对应,push和pop对应。
present只能逐级返回,push所有视图由视图栈控制,可以返回上一级,也可以返回到根vc或其他vc。

push和pop

push和pop分别用于在导航控制器中添加视图控制器、移除视图控制器。

push

push 方法通常与导航控制器(UINavigationController)一起使用。当我们调用一个视图控制器的pushViewController:animated: 方法时,即会将新的视图控制器“推入”导航堆栈的顶部,且会创建一个向右滑动的动画效果,并且新的视图控制器会成为当前显示的视图控制器。

当我们想要在应用程序中创建一个导航层次结构时,比如在不同的层级之间切换,如从列表到详情。用户可以通过按下导航栏上的返回按钮或手势滑动来返回到先前的视图控制器。

示例代码:

UIViewController *viewController = [[UIViewController alloc] init];
[self.navigationController pushViewController:viewController animated:YES];

pop

从导航堆栈中移除当前视图控制器,返回到之前的视图控制器。使用popViewControllerAnimated:方法,实现用户点击返回按钮或手势滑动返回上一个视图控制器功能。

示例代码:

[self.navigationController popViewControllerAnimated:YES];

present和dismiss

present和dismiss分别用于呈现模态视图控制器和关闭模态视图控制器。

模态对话框(Modal Dialog)是一种用户界面元素,它用于在应用程序中临时显示一个窗口,要求用户进行交互,同时阻止用户与应用程序的其他部分进行交互,直到对话框关闭。在模态对话框显示期间,用户必须对对话框进行响应,才能返回到应用程序的主界面。

present

present 方法用于模态地呈现一个视图控制器。当你调用一个视图控制器的 presentViewController:animated:completion: 方法时,你正在将新的视图控制器覆盖在当前视图控制器之上。这通常用于显示一个临时的界面,如弹出窗口、警告框或表单。

当你想要显示一个临时的视图控制器,用户需要与之交互,比如登录窗口、设置选项或表单。
当你不需要导航堆栈来管理视图控制器时,比如在游戏或媒体播放器中。
示例代码:

UIViewController *viewController = [[UIViewController alloc] init];
[self presentViewController:viewController animated:YES completion:nil];

dismiss

关闭当前模态呈现的视图控制器,返回到之前的视图控制器。
使用dismissViewControllerAnimated:completion:方法,实现用户完成模态视图控制器中的操作(如填写表单、查看图片后)并关闭它的功能。
示例代码:

[self dismissViewControllerAnimated:YES completion:nil];

实现模态对话框代码示例

  1. 创建并呈现模态对话框
// 创建一个新的视图控制器实例,这将作为模态对话框
UIViewController *modalViewController = [[UIViewController alloc] init];// 配置模态对话框视图控制器的属性,如视图背景色、大小等
modalViewController.view.backgroundColor = [UIColor whiteColor];
modalViewController.modalPresentationStyle = UIModalPresentationStyleOverFullScreen; // 设置模态样式// 呈现模态对话框
[self presentViewController:modalViewController animated:YES completion:nil];
  1. 关闭模态对话框
// 在模态对话框中添加一个按钮,用于关闭对话框
UIButton *closeButton = [UIButton buttonWithType:UIButtonTypeSystem];
[closeButton setTitle:@"Close" forState:UIControlStateNormal];
[closeButton addTarget:self action:@selector(closeModal) forControlEvents:UIControlEventTouchUpInside];
[modalViewController.view addSubview:closeButton];// 实现关闭模态对话框的方法
- (void)closeModal {// 调用 dismiss 来关闭模态对话框[self dismissViewControllerAnimated:YES completion:nil];
}

区别

导航堆栈:push 将视图控制器添加到导航堆栈中,而 present 不会。
返回方式:使用 push 时,用户可以通过物理返回按钮或手势返回到前一个视图控制器。使用 present 时,通常需要实现一个关闭按钮或手势来关闭模态视图控制器。
动画效果:push 通常向右滑动,而 present 的动画效果可以自定义,通常从底部或中间弹出。
使用上下文:push 适用于导航结构,present 适用于模态对话框。

总结

present一般用于不同业务界面的切换,push一般用于同一业务不同界面之间的切换。
导航控制器(UINavigationController):主要用于管理视图控制器的堆栈,支持 push 和 pop 操作。
模态呈现(Modal Presentation):不涉及导航堆栈,用于临时显示视图控制器,支持 present 和 dismiss 操作。
返回按钮和关闭按钮:在 pop 和 dismiss 操作中,通常有返回按钮或关闭按钮供用户操作。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 记某学校小程序漏洞挖掘
  • 13年408计算机考研-计算机网络
  • 深度解读 2024 Gartner DevOps 魔力象限
  • 基于YOLOv5s的无人机航拍输电线瓷瓶检测(附数据集与操作步骤)
  • LLM - 理解 多模态大语言模型(MLLM) 的 对齐微调(Alignment) 与相关技术 (五)
  • DK5V100R20HL贴片12V 2.7A同步整流芯片
  • TensorRT-LLM——优化大型语言模型推理以实现最大性能的综合指南
  • 多目相机贴图
  • 【项目】多设计模式下的同步异步日志系统
  • R包:VennDiagram韦恩图
  • 基于微信小程序的商品展示+ssm(lw+演示+源码+运行)
  • string和oj题以及vector的接口介绍
  • Redis五种基本数据结构的使用
  • 【设计模式】创建型模式(三):单例模式
  • oracle avg、count、max、min、sum、having、any、all、nvl的用法
  • 《剑指offer》分解让复杂问题更简单
  • 【5+】跨webview多页面 触发事件(二)
  • 【mysql】环境安装、服务启动、密码设置
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • C++入门教程(10):for 语句
  • js数组之filter
  • vue总结
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 个人博客开发系列:评论功能之GitHub账号OAuth授权
  • 模型微调
  • 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  • 最简单的无缝轮播
  • 【运维趟坑回忆录】vpc迁移 - 吃螃蟹之路
  • 阿里云ACE认证学习知识点梳理
  • 我们雇佣了一只大猴子...
  • ​​​​​​​STM32通过SPI硬件读写W25Q64
  • # 详解 JS 中的事件循环、宏/微任务、Primise对象、定时器函数,以及其在工作中的应用和注意事项
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (6)设计一个TimeMap
  • (超详细)语音信号处理之特征提取
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (蓝桥杯每日一题)love
  • (论文阅读11/100)Fast R-CNN
  • (三)Honghu Cloud云架构一定时调度平台
  • (四) Graphivz 颜色选择
  • (译)计算距离、方位和更多经纬度之间的点
  • (转)关于pipe()的详细解析
  • .a文件和.so文件
  • .NET C# 配置 Options
  • .NET CLR基本术语
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • ??如何把JavaScript脚本中的参数传到java代码段中
  • @DateTimeFormat 和 @JsonFormat 注解详解
  • [2017][note]基于空间交叉相位调制的两个连续波在few layer铋Bi中的全光switch——
  • [20171106]配置客户端连接注意.txt
  • [2024-06]-[大模型]-[Ollama]- WebUI