iOS开发笔记之ViewController视图控制器间的跳转

开发中遇到的几种ViewController间的跳转,谨记视图控制器按照后进先出的堆栈方式叠加上去的
注意present和dismiss;push 和 pop 一般是成对存在的,底层VCdismiss或pop后上层的也会释放掉的


其中A,B,C均指普通的ViewController


案例一:(例如登录退出)
A-presentViewController->B-presentViewController->C


如何从 C dismissViewController 到 A 呢?如下:
    
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    
看看官方文档就知道
// The view controller that was presented by this view controller or its nearest ancestor.
@property(nonatomic,readonly) UIViewController *presentedViewController  NS_AVAILABLE_IOS(5_0);


// The view controller that presented this view controller (or its farthest ancestor.)
@property(nonatomic,readonly) UIViewController *presentingViewController NS_AVAILABLE_IOS(5_0);


打印一下发现
 C 的presentingViewController = <BViewController: 0x1556023b0>
及presentingViewController.presentingViewController = <AViewController: 0x155607a30>
试了一下
[self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
发现无法达到预期效果,估计应该要从最底层的释放方可


案例二:底层是NavigationController
naviA - push -> B -puch-> C-pusn-> D -push->E


这里我想从 E pop到任意一个VC该怎么办呢,先获取NavigationController上所有的VC,遍历到自己想要跳转的,跳过去就行,方法如下:
            NSArray *vcS=[self.navigationController viewControllers];
            [vcS enumerateObjectsUsingBlock:^(YourViewController* obj, NSUInteger idx, BOOL *stop) {
                if([obj isKindOfClass:[YourViewController class]]){
                    YourViewController* bin=(YourViewController*)obj;
                    [self.navigationController popToViewController:bin animated:YES];
                    *stop=YES;
                }
            }];




案例三:底层是NSTabBarViewController+ 多个NSNavigationController
需求是像微信那样不管是从朋友圈进去一直push到聊天界面还是从消息界面push到聊天界面,然后从聊天界面直接pop出来后总是显示在第一个tab的消息界面
做法是:在退出按钮按下时先设置tabBarViewController的selectItem=0,再popToRootViewController
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值