ios presentviewjsp跳转controllerr 跳转了2次视图怎么返回根视图

iOS 怎么在多次presentViewController后直接返回到最底层界面 - CSDN博客
iOS 怎么在多次presentViewController后直接返回到最底层界面
presentViewController是经常会用到的展现ViewController的方式,而显示和去除presentViewController也是很简单的,主要是下面两个方法:
- (void)presentViewController:(UIViewController *)viewControllerToPresent animated: (BOOL)flag completion:(void&(^&__nullable)(void))completionNS_AVAILABLE_IOS(5_0);
- (void)dismissViewControllerAnimated: (BOOL)flag completion: (void&(^__nullable)(void))completionNS_AVAILABLE_IOS(5_0);
但是有的时候我们的需求很特殊,比如在一个presentViewController里要present另一个viewController,甚至再present一个viewController,然后可能在某个时候APP发出一条消息,需要一下子dismiss掉所有的viewController,回到最开始的视图控制器,这时候该如何办呢?下面一起来看看解决办法?
首先,必须知道现在整个APP最顶层的ViewController是哪个,我的做法是建立一个父视图控制器,称为BaseViewController,然后在该视图控制器的viewWillAppear进行记录操作,调用appDelegate单例设置一个属性记录当前视图控制器,然后对于需要进行present操作的视图控制器,继承于BaseViewController,那么每次present一个新的视图控制器,父视图控制器的viewWillAppear方法都会被执行:
-(void)viewWillAppear:(BOOL)animated{
AppDelegate *delegate=(AppDelegate *)[[UIApplication sharedApplication]delegate];
delegate.presentingController =
在appDelegate.h文件里面添加一个属性presentingController,来记录当前视图控制器,注意这里的属性名并不是presentingViewController,不要搞混了。
然后,在需要处理事件的地方(如:点击事件),在点击事件的方法中加入如下代码,即可回到最初视图控制器显示页面:
- (void)clickButton:(id)sender {
AppDelegate *appDele = (AppDelegate *)[UIApplication sharedApplication].
if (appDele.presentingController){
UIViewController *vc = appDele.presentingController.presentingViewC
if (vc.presentingViewController){
//循环获取present出来本视图控制器的视图控制器(简单一点理解就是上级视图控制器),一直到最底层,然后在dismiss,那么就ok了!
while (vc.presentingViewController){
vc = vc.presentingViewC
[vc dismissViewControllerAnimated:YES completion:nil];
转自:http://blog.csdn.net/longshihua/article/details/
本文已收录于以下专栏:
相关文章推荐
iOS 控制器多次present后返回根控制器。
presentViewController是经常会用到的展现ViewController的方式,而显示和去除presentViewController也是很简单的,主要是下面两个方法:
http://blog.csdn.net/assholeu/article/details/
iOS 回到rootViewController根控制器视图直接上代码- (void)backToRootViewController{
UIViewController* vc = [Mai...
今天这个真的我很想写一篇很详细的的文章来说明这两个混用后的推出方法,因为之前折磨了我很久。
简单的用一张图来概括下情况。
需要实现的最终结果是从F界面一下子回到A界面
/yingkong1987/p/3343937.html当遇到:A presentViewController B ,
B presentVie...
一、主要用途
  弹出模态ViewController是IOS变成中很有用的一个技术,UIKit提供的一些专门用于模态显示的ViewController,如UIImagePickerControll...
UIViewController的presentedViewController,presentingViewController和parentViewController三个属性
presente...
转载:/2013/10/vc-transition-in-ios7/
这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览。本文仅作为个人记录...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)ios 开发--使用模态跳转了2次之后怎么从第三个视图控制器回到跟视图控制器 - CSDN博客
ios 开发--使用模态跳转了2次之后怎么从第三个视图控制器回到跟视图控制器
使用模态跳转了2次之后怎么从第三个视图控制器回到跟视图控制器
如果直接用self dismiss 之后再让第二个视图再dismiss得话效果太差了
self.presentingViewController.view.alpha = 0;
[self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
第一行代码让B的视图变为透明(由于父视图变为透明,任何B的子视图都会透明)。这样的效果将是C的视图从A的视图上滑出。
第二行代码中连续获取了两次presentingViewController,其实就是A,不过这使得A视图控制器中不用添加任何代码,从而解决了耦合的问题。
本文已收录于以下专栏:
相关文章推荐
今天用模态视图控制器(Modal View Controller)时遇到了一个很狗血的问题,按理说presentModalViewController和dismissModalViewControll...
//  AppDelegate.swift
import UIKit
@UIApplicationMain
class AppDelegate:
UIResponder, UIApplica...
- (二)视图和视图控制器1,界面之间的切换IOS应用是由一个一个的视图控制器(ViewController)组成的,感觉和Android的Activity差不多。
新建工程时已经默认创建了一个视图...
一、最普通的视图控制器UIViewContoller
  一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现这种...
/info-detail-469709.html
一、最普通的视图控制器UIViewContoller
  一个普通的视图控制器一般只有模...
视图的跳转有很多的方式,本文主要将其分为普通的viewController和导航控制器navigationController两种来进行详细说明
一、最普通的视图控制器UIViewContoller
  一个普通的视图控制器一般只有模态跳转的功能(ipad我不了解除外,这里只说iPhone),这个方法是所有视图控制器对象都可以用的,而实现...
今天在偶尔使用UIAlertView的时候,发现这个组件已经不被推荐使用了,虽然还是可以用的,但是在iOS9出了的情况下,使用前景不容乐观,所以今天就抽时间研究了下,苹果推荐的组件 UIAlertCo...
他的最新文章
讲师:宋宝华
讲师:何宇健
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)总结IOS界面间跳转的几种方法
投稿:daisy
字体:[ ] 类型:转载 时间:
前段时间被问到界面间的跳转有几种方式?想不到说的竟有点含糊其辞,于是就想总结一下。有句话说的好,“前人种树,后人乘凉”,目前作为一个乘凉者,我也希望能种一些树木,为代码世界营造一份清新。好了,话不多说,进入主题。
下面以FirstViewController(FVC)的按钮button点击后跳转到SecondViewController(SVC)为例说明:
方式一:Storyboard的segues方式
鼠标点击按钮button然后按住control键拖拽到SVC页面,在弹出的segue页面中选择跳转模式即可
优点:操作方便,无代码生成,在storyboard中展示逻辑清晰
缺点:页面较多时不方便查看,团队合作时可维护性差, 多人合作时不建议使用这种方式。
方式二:选项卡UITabBarController控制器
通过调用UITabBarController的addChildViewController方法添加子控制器,代码实例如下:
UITabBarController *tabbarVC = [[ UITabBarController alloc ] init ];
FirstViewController *FVC = [[FirstViewController ] init ];
FVC.tabBarItem.title = @"控制器1" ;
FVC.tabBarItem.image = [ UIImage imageNamed : @"first.png" ];
SecondViewController *SVC = [[SecondViewController ] init ];
SVC.tabBarItem.title = @"控制器2" ;
SVC. tabBarItem.image = [UIImage imageNamed : @"new.png" ];
// 添加子控制器(这些子控制器会自动添加到UITabBarController的 viewControllers 数组中)
[tabbarVC addChildViewController :FVC];
[tabbarVC addChildViewController :SVC];
优点:代码量较少
缺点:tabbar的ios原生样式不太好看,(不常用,目前不建议使用),如果要使用,建议自定义tabbar
方式三:导航控制器UINavigationController
在FVC的button的监听方法中调用:
[self.navigationController pushViewController:newC animated:YES]; //跳转到下一页面
在SVC的方法中调用:
[self.navigationController popViewControllerAnimated:YES]; //返回上一页面
当有多次跳转发生并希望返回根控制器时,调用:
[ self .navigationController popToRootViewControllerAnimated: YES ]; //返回根控制器,即最开始的页面
方式四:利用 Modal 形式展示控制器
在FVC中调用:
[ self presentViewController:SVC animated: YES completion:nil];
在SVC中调用:
[ self dismissViewControllerAnimated: YES completion: nil ];
方式五:直接更改 UIWindow 的 rootViewController
Storyboard方式适合个人开发小程序时使用,有团队合作或者项目较大时不建议使用
UITabBarController因为目前系统的原生样式不太美观,不建议使用
推荐使用UINavigationController和Modal,无明显缺点,而且目前大部分程序都使用这两种方式,只是看是否需要导航控制器而确定使用哪种方案
好了,以上就是本文的全部内容,希望对大家开发IOS时有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 presentcontroller 的文章

 

随机推荐