presentedViewController 和 presentingViewController 以及 dismissViewControllerAnimated 的使用
在日常的开发中,多控制器之间的跳转除了使用push的方式,还可以使用 present的方式,present控制器时,就避免不了使用 presentedviewcontroller、presentingviewcontroller ,这两个概念容易混淆,简单介绍一下。
1:present 控制器的使用
使用present的方式,从一个控制器跳转到另一个控制器的方法如下:
1
2
3
|
[ self presentviewcontroller:vc animated: yes completion:^{
}]; |
2:presentedviewcontroller 与 presentingviewcontroller
假设从a控制器通过present的方式跳转到了b控制器,那么 a.presentedviewcontroller 就是b控制器;b.presentingviewcontroller 就是a控制器。
3:dismissviewcontrolleranimated 方法的使用
假设从a控制器通过present的方式跳转到了b控制器,现在想要回到a控制器,那么需要a控制器调
- (void)dismissviewcontrolleranimated: (bool)flag completion: (void (^ __nullable)(void))completion
方法。注意:是想要从b控制器回到a控制器时,需要a控制器调用上面的方法,而不是b控制器。简单来说,如果控制器通过present的方式跳转,想要回到哪个控制器,则需要哪个控制器调用 dismissviewcontrolleranimated 方法。
举例来说,从a控制器跳转到b控制器,在b控制器中点击了返回按钮,期望能够回到a控制器,则b控制器中点击返回按钮触发事件的代码是:
[self.presentingviewcontroller dismissviewcontrolleranimated:yes completion:^{ }];
注意:这段代码是在b中执行,因此 self.presentingviewcontroller 实际上就是a控制器,这样就返回到了a控制器。
如果多个控制器都通过 present 的方式跳转呢?比如从a跳转到b,从b跳转到c,从c跳转到d,如何由d直接返回到a呢?可以通过 presentingviewcontroller 一直找到a控制器,然后调用a控制器的 dismissviewcontrolleranimated 方法。方法如下:
uiviewcontroller *controller = self; while(controller.presentingviewcontroller != nil){ controller = controller.presentingviewcontroller; } [controller dismissviewcontrolleranimated:yes completion:nil];
ps:如果不是想直接返回到a控制器,比如想回到b控制器,while循环的终止条件可以通过控制器的类来判断。
推荐阅读
-
DevExpress的GridControl的使用以及怎样添加列和绑定数据源
-
FORM中使用onSubmit="return false"防止表单自动提交,以及submit和button提交表单的区别
-
一个不错的PHP缓存类介绍和PHP缓存函数介绍以及使用
-
长连接和短连接的定义,优缺点以及使用场景介绍
-
matplotlib 画动态图以及plt.ion()和plt.ioff()的使用详解
-
异构环境oracle数据库迁移教程之exp和imp以及expdp和impdp的使用
-
@RequestBody和@ResponseBody的使用情形以及RestTemplate的http报文转换
-
Android的handler基本使用以及做一个简单进度条和轮播图以及子线程中用handler
-
yarn和npm的对比以及yarn的使用
-
python学习笔记(十三) -- 多重继承和MixIn,以及@property的使用