一.定义区别

  1. pushViewController 导航栏控制器入栈的方式切换页面(pop可以返回任意一层)push一般用于同一业务不同界面之间的切换(也就是只能导航栏间的切换,从第二个导航栏到第三个导航栏)
- (void) pass {NSLog(@"pass to third");//第三个同样是导航栏,而且两个导航栏之间可以自由返回ThirdViewController *thirdVC = [[ThirdViewController alloc] init];[self.navigationController pushViewController:thirdVC animated:YES];
}
  1. presentViewController模式切换的方式切换页面(dismiss只能逐级返回)present一般用于不同业务界面的切换。
    若是由视图页面转到导航栏,要先建立一个导航栏。
//出来一个navigationSecondViewController *secondVC = [[SecondViewController alloc] init];UINavigationController *navSecondVC = [[UINavigationController alloc] initWithRootViewController:secondVC];navSecondVC.modalPresentationStyle = UIModalPresentationFullScreen;[self presentViewController:navSecondVC animated:YES completion:nil];

若是两个视图间,直接用present即可

- (void) press {NSLog(@"press 01");SecondViewController *secondVC = [[SecondViewController alloc] init];secondVC.modalPresentationStyle = UIModalPresentationFullScreen;[self presentViewController:secondVC animated:YES completion:nil];
}

二. 返回方法

  1. push和pop对应
    用UINavigationController的时候用pushViewController:animated返回之前的视图[[self navigationController] popViewControllerAnimated:YES]; push以后会在navigation的left bar自动添加back按钮,所以一般不用写返回,点back方法即可
    有关pop,pop一般返回一级和左上角的back的作用是一样的,所以它的用处在于可以分级返回
 //返回上一视图[self.navigationController popViewControllerAnimated:YES];//返回根视图(to root)[self.navigationController popToRootViewControllerAnimated:YES];//返回任意视图(atindex后加返回的层数)[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
  1. present和dismiss对应presentModalViewController:animated
    [self presentModalViewController:controller animated:YES];
    返回之前的视图 [self dismissModalViewControllerAnimated:YES];
    dismiss在导航栏和页面中都可以使用,在页面中即返回上一级页面,在导航栏中使用的话是返回到所有导航栏前的一个页面,但是写法是相同的。
- (void) backDiss {NSLog(@"backdiss");[self dismissViewControllerAnimated:YES completion:nil];
}

三.使用区别

  1. [self presentModalViewController:controller animated:YES];主语是UIVIewController,即单纯页面切换
  2. [self.navigationController pushViewController:upViewController animated:YES];与[self.navigationController popViewControllerAnimated:YES];这两句时主语是navigationController,所以如果是在导航栏上实现页面的跳转使用push,除此之外的都是用present

代码

2020-10-04 23:15:46.330677+0800 present和push[79292:5066460] press 01 to
2020-10-04 23:16:19.915102+0800 present和push[79292:5066460] pass to third
2020-10-04 23:16:42.522594+0800 present和push[79292:5066460] backPop to Second
2020-10-04 23:16:47.412832+0800 present和push[79292:5066460] pass to third
2020-10-04 23:16:48.862871+0800 present和push[79292:5066460] backdiss to First(dissmiss因为上一级页面是第一个,两个导航栏是同一级页面)
2020-10-04 23:17:01.976698+0800 present和push[79292:5066460] press 01 to
2020-10-04 23:17:04.255234+0800 present和push[79292:5066460] pass to four
2020-10-04 23:17:12.925467+0800 present和push[79292:5066460] back2 ?->dissmiss second(因为上一级页面是第二个)
2020-10-04 23:18:01.000129+0800 present和push[79292:5071067] [ServicesDaemonManager] interruptionHandler is called. -[FontServicesDaemonManager connection]_block_invoke

我写的代码,第一个视图present到第二个(导航栏)。第二个push到第三个(导航栏),第三个可以通过dismiss返回到第一个,也可以通过pop回到第二个。第二个还可以present到第四个(一个界面),第四个通过dismiss回到第二个(导航栏)。如下图:



iOS - present和push相关推荐

  1. iOS present 和 push

    文章目录 简介 使用方法 A视图 present 到 B视图再push到 C视图 C视图使用dismiss返回 C视图使用pop返回 简介 共同点 – present和push方法都可用于推出新的界面 ...

  2. [iOS]-present和push

    共同点: present和朴实方法都可以用于推出新的界面,present和dismiss对应使用,push和pop对应使用. 不同点: present弹出的视图是模态视图(是一个临时视图)并且模式情况 ...

  3. 【iOS】present和push

    present和push present和dismiss 使用方法 特点 push和pop 使用方法 特点 demo present和dismiss 使用方法 使用一般的视图控制器用present方法 ...

  4. 【iOS开发】——present和push

    假期写UI的时候就遇到了到底是使用present还是使用push,二者虽都可以推出新界面,但是用法等方面略有不同. 一. present与push之间的不同点和相同点 共同点 push与present ...

  5. iOS - APP任意push新页面那些事

    大家都知道,UINavigationController对象有一个方法pushViewController,用来做视图跳转,也是在iOS开发中常用的页面转换方法之一.大多数APP的结构一般都是,使用一 ...

  6. iOS 无法添加 push notifications

    0x00 添加不了 在工程配置中点击 +Capability 搜索Push Notifications 单击.双击.拖动 都添加不了 0x01 解决方案 项目中的 XXX.entitlements(这 ...

  7. present/push的恩怨情仇

    present/push的恩怨情仇 push/pop 简介 VC栈存储 container view controller 优势 dealloc navigationController 无navig ...

  8. iOS 自定义转场动画实现小红书的push效果思路以及下雪碎屏等动画的实现

    感觉好久没写会动的Demo了,前几天写了很久的Block源码分析,分析了几天整个人都不好了,都不知道block是什么了......,有需要的同学可以去看看,简直不要太简单Block是什么鬼毕竟也是做电 ...

  9. iOS iOS应用PUSH功能的实现

    1. push原理 iOS push 工作机制可以用下图简要概括 Provider:应用自己的服务器: APNS:Apple Push Notification Service的简称,苹果的PUSH服 ...

最新文章

  1. Nacos更新配置参数不生效
  2. android object数组赋值_Java对象数组定义与用法详解
  3. jflash view log_塑胶产品上的“LOG”是怎么来的?
  4. 混凝土泵送机械大数据挖掘与应用
  5. 长痘痘部位和对应的毛病
  6. Apache Flink 在快手的过去、现在和未来
  7. java获取取得Timestamp类型的当前系统时间
  8. jacob+wps 文档转为pdf excel转换pdf卡死无响应
  9. 计算机应届博士生的一点求职经验——概述篇
  10. QQ邮箱一键删除所有邮件的方法
  11. libdbus 实例以及使用d-feet查看接口方法
  12. 2021年总结:厚积薄发,突破自我
  13. 谷歌浏览器怎么关闭硬件加速?
  14. 又猎一“狐”:一名外逃越南嫌疑人落网啦
  15. 机器学习——验证方法
  16. Ubuntu apt update无论使用什么源都出现类似的错误
  17. vue会不会?看了你就会了!干了#兄弟们
  18. linux必装软件有哪些,来说说Linux下的那些常用软件
  19. 基于 Ekman 方程求解大气边界层中的水平均匀流和高度相关的涡流粘度附matlab代码
  20. Nginx+Tomcat服务器负载均衡实践方案

热门文章

  1. [附源码]java毕业设计龙虎时代健身房管理系统
  2. Microsoft ToDo无法同步的解决方案
  3. 在线答题小程序开发中遇到的一些兼容问题及性能优化
  4. 不同施肥类型导致产量不同--SPSS 单因素方差分析
  5. 线性回归模型的评估方法
  6. 手机端使用JuiceSSH与pc通信,也可以用来操控树莓派
  7. python包:Dask介绍
  8. python 使用pyqt5实现了一个汽车配件记录系统
  9. mysql的selectwhere语句_(MySQL笔记)SELECT语句的WHERE子句详解
  10. WPF中的MouseEnter和MouseLeave循环