iOS有关pop到self.navigationController.viewControllers以外的界面
2017-05-19 14:34
633 查看
今天在编写项目时,遇到一个难题,就是pop出栈的问题,现在的场景是这样:如图 ↓ ,而遇到的问题则是当返回到商品详情/订单详情是,固定死的返回到对应额商品包/订单列表页面,那么,如果是从商品包点击push压栈到支付成功页面,那么点击完成是要跳到订单详情页面,而在订单详情页面中点击左上角的返回要返回至订单列表,那么,用之前发表过的pop出栈,则不可用了,因为从我的首页到购买成功,压栈的栈数组中,并没有包含订单详情页面,也就是说此类问题就是pop到界面栈数组以外的界面中去,如何实现。
遇到这种问题,因为考虑到都是从我的首页进入,那么只需要在订单列表和商品包中的返回方法里面实现返回到栈底就好了。
[self.navigationController popToRootViewControllerAnimated:YES];
问题的重点就在于,如何在详情中实现返回至商品包页面/订单列表页面
以下是我的设计想法
#pragma mark -- 返回按钮点击
- (void)theBackBtnClick:(UIButton*)sender
{
NSArray* viewArr = self.navigationController.viewControllers;
if(viewArr[1] == [YGMyOrderVCViewController class]){
//说明是从我的订单里面进来的则返回至上层
[self.navigationController popViewControllerAnimated:YES];
}else{
//是从其他地方进入到商品详情,此时也要返回到我的订单里面,但是不管从哪里进来的,都是从我的首页进来的,因此栈顶肯定为我的首页
NSMutableArray *pageArray = [self.navigationController.viewControllers mutableCopy];
YGMyOrderVCViewController *insert = [[YGMyOrderVCViewController alloc] init];
//插入界面栈
[pageArray insertObject:insert atIndex: 1];
[self.navigationController setViewControllers:pageArray animated:NO];
insert.hidesBottomBarWhenPushed = YES;
[self.navigationController popToViewController:insert animated:YES];
}
}
这样就可以解决问题。
有更好见解的,欢迎来探讨。
遇到这种问题,因为考虑到都是从我的首页进入,那么只需要在订单列表和商品包中的返回方法里面实现返回到栈底就好了。
[self.navigationController popToRootViewControllerAnimated:YES];
问题的重点就在于,如何在详情中实现返回至商品包页面/订单列表页面
以下是我的设计想法
#pragma mark -- 返回按钮点击
- (void)theBackBtnClick:(UIButton*)sender
{
NSArray* viewArr = self.navigationController.viewControllers;
if(viewArr[1] == [YGMyOrderVCViewController class]){
//说明是从我的订单里面进来的则返回至上层
[self.navigationController popViewControllerAnimated:YES];
}else{
//是从其他地方进入到商品详情,此时也要返回到我的订单里面,但是不管从哪里进来的,都是从我的首页进来的,因此栈顶肯定为我的首页
NSMutableArray *pageArray = [self.navigationController.viewControllers mutableCopy];
YGMyOrderVCViewController *insert = [[YGMyOrderVCViewController alloc] init];
//插入界面栈
[pageArray insertObject:insert atIndex: 1];
[self.navigationController setViewControllers:pageArray animated:NO];
insert.hidesBottomBarWhenPushed = YES;
[self.navigationController popToViewController:insert animated:YES];
}
}
这样就可以解决问题。
有更好见解的,欢迎来探讨。
相关文章推荐
- iOS:更改navigationController push和pop界面切换动画
- ios 版本迭代开发中,去重,支付,以及界面遇到的bug(使用到navigation防止界面的self.view坐标发生改变)
- IOS navigationController.popToViewController的使用
- 如何让self.navigationController退出到指定页面,或者让它一次性pop出两个页面popViewControllerAnimated没有
- iOS基础: navigationController.popToViewController的使用
- 单例中存储self.navigationController.viewControllers
- [ios]使用self.view.window.rootViewController presentViewControllert跳转后的返回
- View Controller Programming Guide for iOS---(八)---Using View Controllers in the Responder Chain
- self.navigationController.view 和 self.view的区别
- self.navigationController退出到指定页面,或者一次性pop出n个页面
- ios不响应presentModalViewController界面的处理
- iOSm界面跳转和参数传递之presentViewController与dismissViewControllerAnimated
- IOS-Navigation的添加(RootViewController)
- iOS 在viewController中监听Home键触发以及重新进入界面的方法
- iOS navigationcontroller pop 回到上一层视图 如何刷新
- 更改navigationController push和pop界面切换动画
- iOS self.navigationController退出到指定页面
- iOS navigationcontroller中的back按钮的隐藏及右滑pop操作整理
- iOS pushViewController 实现push 和pop 默认动画效果
- 转换UITableViewCell在 self.navigationController.view 上的位置