当前位置: 首页 > 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 操作中,通常有返回按钮或关闭按钮供用户操作。

相关文章:

【iOS】push和pop、present和dismiss

目录 前言push和poppushpop present和dismisspresentdismiss实现模态对话框代码示例 区别总结 前言 push 和 present 是两种用于导航和切换视图控制器(ViewController)的常用方法,push与present都可以推出新的界面,present与dismi…...

基于51单片机的两路电压检测(ADC0808)

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机,通过ADC0808获取两路电压,通过LCD1602显示 二、硬件资源 基于KEIL5编写C代码,PROTEUS8.15进行仿真,全部资源在页尾,提供…...

JavaScript ---案例(统计字符出现次数)

统计字符出现次数 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-w…...

切换淘宝最新npm镜像源

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;前端工程师 文章目录 一、&#x1f30e;前言二、&#x1f30e;切换淘宝最新npm镜像源2.…...

mysql时间戳格式化yyyy-mm-dd

格式化到 年月日 # 将时间换成列名就行&#xff1b;当前是秒级时间戳&#xff0c;如果是毫秒的 / 1000即可 # SELECT FROM_UNIXTIME(1602668106666.777888999 / 1000,%Y-%m-%d) AS a; # SELECT FROM_UNIXTIME(列名 / 1000,%Y-%m-%d) AS a; SELECT FROM_UNIXTIME(1602668106.666…...

网络丢包定位记录(二)

网卡驱动丢包 查看&#xff1a;ifconfig eth1/eth0 等接口 1.RX errors: 表示总的收包的错误数量&#xff0c;还包括too-long-frames错误&#xff0c;Ring Buffer 溢出错误&#xff0c;crc 校验错误&#xff0c;帧同步错误&#xff0c;fifo overruns 以及 missed pkg 等等。 …...

深度学习自编码器 - 自编码器的应用篇

序言 在深度学习的广阔领域中&#xff0c;自编码器&#xff08; Autoencoder \text{Autoencoder} Autoencoder&#xff09;作为一种无监督学习算法&#xff0c;凭借其独特的数据处理与特征提取能力&#xff0c;在多个领域展现出巨大的应用潜力。自编码器通过编码器将输入数据映…...

Python 小工具制作 系列文章 - 总目录

【Python实战】 ---- 批量图片压缩【python实战】---- 30行代码提取个人值班表【Python实战】---- 30行代码破解加密压缩包【python 实战】---- 批量将图片转换成base64工具开发【python 实战】---- 批量将xlxs文件中的base64转换成png图片工具开发【Python 实战】---- 批量对图…...

Codeforces Round 973 (Div. 2) - D题

传送门&#xff1a;Problem - D - Codeforces 题目大意&#xff1a; 思路&#xff1a; 尽量要 最大值变小&#xff0c;最小值变大 即求 最大值的最小 和 最小值的最大 -> 二分答案 AC代码&#xff1a; 代码有注释 #include<bits/stdc.h> using namespace std; #…...

threejs性能优化之gltf文件压缩threejs性能优化之glb文件压缩

在使用Three.js进行3D图形开发时&#xff0c;GLTF&#xff08;GL Transmission Format&#xff09;文件因其高效性和灵活性而广受欢迎。然而&#xff0c;随着模型复杂度的增加&#xff0c;GLTF文件的大小也会显著增加&#xff0c;这可能会对加载时间和渲染性能产生负面影响。为…...

设计模式 享元模式(Flyweight Pattern)

享元模式 简绍 享元模式&#xff08;Flyweight Pattern&#xff09;是一种结构型设计模式&#xff0c;它的目的是通过共享技术来有效地支持大量细粒度的对象。享元模式可以极大地减少内存的使用&#xff0c;从而提高程序的性能。它特别适用于需要创建大量相似对象的场景&#…...

Leetcode 3290. Maximum Multiplication Score

Leetcode 3290. Maximum Multiplication Score 1. 解题思路2. 代码实现 题目链接&#xff1a;3290. Maximum Multiplication Score 1. 解题思路 这一题的话就是一个比较暴力的动态规划&#xff0c;这里就不过多展开了&#xff0c;参考代码看一下就行。 2. 代码实现 给出py…...

CefSharp_Vue交互(Element UI)_WinFormWeb应用(3)---通过页面锁屏和关机(含示例代码)

一、预览 实现功能:通过vue标题栏按钮锁屏和关机 1.1 预览 1.2 代码 锁屏代码csharp LockWorkStation() 关机代码chsharp 注意vue代码参数和此参数一致(0/1/2) 方法ExitWindowsEx()...

unity UnityWebRequest 的request.downloadHandler 空应用

unity UnityWebRequest 的request.downloadHandler 空应用 private IEnumerator Test_Get() {UnityWebRequest request new UnityWebRequest(tmp_getURL, "GET");yield return request.SendWebRequest();if (request.result UnityWebRequest.Result.ConnectionErr…...

使用 UWA Gears 定位游戏内存问题

UWA Gears 是UWA最新发布的无SDK性能分析工具。针对移动平台&#xff0c;提供了实时监测和截帧分析功能&#xff0c;帮助您精准定位性能热点&#xff0c;提升应用的整体表现。 内存不足、内存泄漏和过度使用等问题&#xff0c;常常导致游戏出现卡顿、崩溃&#xff0c;甚至影响…...

OpenRestry(一个Nginx集成工具)的安装与使用

文章目录 一、OpenRestry介绍1、什么是Nginx呢&#xff1f;2、Nginx的反向代理3、Nginx的作用4、什么是OpenRestry&#xff1f; 二、OpenRestry的安装三、OpenRestry中nginx的使用1、Ngnix可以当做web服务器2、Nginx中可以编写Lua脚本 一、OpenRestry介绍 要想了解什么是OpenR…...

linux操作系统的基本命令

1.linux下的文件系统 在linux操作目录下没有像window操作系统下盘符的概念,只有一个根目录/,所有文件目录都在它的下面 linux的目录结构: 在Linux系统中: 文件都从跟目录开始的,用/表示文件名称区分大小写路径都是以/俩进行分隔(windown用\分隔)以.开头的文件为隐藏文件 Li…...

通过UV快速计算品牌独立站网络流量

背景&#xff1a; 品牌独立站项目交付过程中&#xff0c;我们需要为客户提供“云资源” 成本报价&#xff0c;其中“计算资源” 及CPU、内存、存储 参数相对固定&#xff0c;而互联网网络成本需要进行评估报价&#xff0c;以海外TOP云平台 AWS、AZURE、GCP 为例都是以“不限带…...

使用Kong开源API网关的保姆级教程

什么是Kong? Kong是一个开源的、云原生、高性能的API网关,可以轻松地为任何服务提供管理、保护和扩展。它提供了一个可扩展的插件生态系统,可以满足各种各样的需求,如身份验证、授权、限流、监控等。 安装Kong 1. 环境准备 操作系统: CentOS、Ubuntu等主流Linux发行版D…...

浅谈Spring Cloud:认识微服务

SpringCloud就是分布式微服务架构的一站式解决方案&#xff0c;是微服务架构落地的多种技术的集合。 目录 微服务远程调用 Eureka注册中心 搭建Eureka Server 注册组件 服务拉取 当各种各样的服务越来越多&#xff0c;拆分的也越来越细&#xff0c;此时就会出现一个服务集…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案

问题描述&#xff1a;iview使用table 中type: "index",分页之后 &#xff0c;索引还是从1开始&#xff0c;试过绑定后台返回数据的id, 这种方法可行&#xff0c;就是后台返回数据的每个页面id都不完全是按照从1开始的升序&#xff0c;因此百度了下&#xff0c;找到了…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

五年级数学知识边界总结思考-下册

目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解&#xff1a;由来、作用与意义**一、知识点核心内容****二、知识点的由来&#xff1a;从生活实践到数学抽象****三、知识的作用&#xff1a;解决实际问题的工具****四、学习的意义&#xff1a;培养核心素养…...

【C++从零实现Json-Rpc框架】第六弹 —— 服务端模块划分

一、项目背景回顾 前五弹完成了Json-Rpc协议解析、请求处理、客户端调用等基础模块搭建。 本弹重点聚焦于服务端的模块划分与架构设计&#xff0c;提升代码结构的可维护性与扩展性。 二、服务端模块设计目标 高内聚低耦合&#xff1a;各模块职责清晰&#xff0c;便于独立开发…...

OPenCV CUDA模块图像处理-----对图像执行 均值漂移滤波(Mean Shift Filtering)函数meanShiftFiltering()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 在 GPU 上对图像执行 均值漂移滤波&#xff08;Mean Shift Filtering&#xff09;&#xff0c;用于图像分割或平滑处理。 该函数将输入图像中的…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

4. TypeScript 类型推断与类型组合

一、类型推断 (一) 什么是类型推断 TypeScript 的类型推断会根据变量、函数返回值、对象和数组的赋值和使用方式&#xff0c;自动确定它们的类型。 这一特性减少了显式类型注解的需要&#xff0c;在保持类型安全的同时简化了代码。通过分析上下文和初始值&#xff0c;TypeSc…...

在 Spring Boot 中使用 JSP

jsp&#xff1f; 好多年没用了。重新整一下 还费了点时间&#xff0c;记录一下。 项目结构&#xff1a; pom: <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://ww…...