UINavigationController跳转那点事

视图控制器UINavigationController是iOS编程中比较常用的一种容器view controller。在NavigationController这个容器中,有一个根视图(rootViewController),在根视图的上面进行压栈和弹栈操作。
常用的方法有:

- (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated; // 是否有动画的跳转下一页
- (nullable UIViewController *)popViewControllerAnimated:(BOOL)animated; // 弹栈操作,返回上一页
- (nullable NSArray<__kindof UIViewController *> *)popToRootViewControllerAnimated:(BOOL)animated; // 返回栈底也就是返回到你的根视图

其实除了以上三个常用的方法之外还有一个方法是:

- (nullable NSArray<__kindof UIViewController *> *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated;

这个方法是弹到栈中的某个viewcontroller下。
在UINavigationController中有一个属性可以很好的使用以上这个方法,就是viewControllers。

@property(nonatomic,copy) NSArray<__kindof UIViewController *> *viewControllers; // The current view controller stack

viewControllers是一个数组,这个数组中包含着所有压栈进去的视图,根视图在数组的最底。
例如:

 NSInteger count = [self.navigationController.viewControllers count];
    UIViewController *vc = [self.navigationController.viewControllers objectAtIndex:count - 2];
    [self.navigationController popToViewController:vc animated:YES];

如果多个界面进行中有循环跳转问题:可以将viewcontrollers这个数组进行修改栈内的视图,从而解决循环跳转问题。
例如:

NSMutableArray * controllers = [NSMutableArray arrayWithArray:self.navigationController.viewControllers];
[controllers removeObjectsInRange:NSMakeRange(i, controllers.count-i-1)];
                [controllers insertObject:RTOrderViewC atIndex:controllers.count-1];
 self.navigationController.viewControllers = controllers;

以上由本人总结所得,如有错误请指出。谢谢!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值