[iOS] push 和 present Controller 的区别

目录

前言

[1.push & pop 方法](#1.push & pop 方法)

[push 方法](#push 方法)

[pop 方法](#pop 方法)

[2.present & dismiss 方法](#2.present & dismiss 方法)

[present 方法](#present 方法)

[dismiss 方法](#dismiss 方法)

[present 和 dismiss 的多级方法](#present 和 dismiss 的多级方法)


前言

push 和 present 分别是 ios 中的两种推出方法。下面我会结合实例来去介绍一下这两个方法。

1.push & pop 方法

push 方法

objectivec 复制代码
ViewControllerB* vcB = [[ViewControllerB alloc] init];
    [self.navigationController pushViewController:vcB animated:YES];

pop 方法

objectivec 复制代码
//返回上一个
[self.navigationController popViewControllerAnimated:YES];

//返回指定的
NSArray *viewControllers = self.navigationController.viewControllers;
UIViewController *targetVC = viewControllers[0]; // 第一个控制器
[self.navigationController popToViewController:targetVC animated:YES];

//返回指定的
[self.navigationController popToRootViewControllerAnimated:YES];

2.present & dismiss 方法

present 方法

objectivec 复制代码
ViewControllerB* vcB = [[ViewControllerB alloc] init];
    UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:vcB];
    [self presentViewController:nav animated:YES completion:nil];

dismiss 方法

dissmiss 这里比较复杂一点他不能直接向 pop 一样返回指定的层数和根视图

这里会去介绍一个多级视图的方法

objectivec 复制代码
[self dismissViewControllerAnimated:YES completion:nil];

present 和 dismiss 的多级方法

在 iOS 中,每个控制器都有两个属性:

presentedViewController

• 含义:当前控制器 展示的(被我 present 出去的)控制器。

• 如果我没有弹出任何控制器,这个属性就是 nil。

presentingViewController

• 含义:展示我的 控制器。

• 如果我是被别人 present 出来的,这个属性就是我的"上一级";否则就是 nil。

这里引用一张图

那这里我们再结合 dissmiss

objectivec 复制代码
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

这个就可以实现从 c 到 a,越过两级视图。

objectivec 复制代码
UIViewController *rootVC = self;
while (rootVC.presentingViewController) {
    rootVC = rootVC.presentingViewController;
}
[rootVC dismissViewControllerAnimated:YES completion:nil];

这段代码就能实现追溯到根视图。

这一切的一切都和 presenting 和 presented 这两个方法有关。

下面我给一个演示的实例

相关推荐
小小8程序员6 小时前
C# XAML中x:Type的用法详解
开发语言·ui·c#
Aevget6 小时前
界面控件DevExpress WinForms中文教程:Data Grid - 如何获取汇总值?
ui·.net·界面控件·winform·devexpress
kk哥88998 小时前
如何在面试中展现自己的软实力?
面试·职场和发展·cocoa
咨询QQ688238869 小时前
基于Matlab的BP与双隐层BP神经网络预测算法探索
objective-c
reddingtons10 小时前
Illustrator 3D Mockup:零建模,矢量包装一键“上架”实拍
人工智能·ui·3d·aigc·illustrator·设计师·平面设计
言之。10 小时前
AI时代的UI发展
人工智能·ui
微:xsooop11 小时前
iOS 上架4.3a 审核4.3a 被拒4.3a 【灾难来袭】
flutter·unity·ios·uniapp
Haha_bj13 小时前
iOS深入理解事件传递及响应
前端·ios·app
5G云网络14 小时前
ComfyUI资源库
ui
在下历飞雨15 小时前
Kuikly基础之动画实战:让孤寡青蛙“活”过来
前端·ios·harmonyos