iOS开发Push和Present混用返回指定控制器
来源:互联网 发布:斗鱼裴语燕 知乎 编辑:程序博客网 时间:2024/05/29 03:00
iOS开发中present和push混合跳转返回指定控制器的两种情况:
第一种:
push push present A -----> B -----> C --------> D
在D界面的返回点击事件:
/**
由 D 界面返回到 B 界面 点击事件(模态控制器-D 发送popToB通知 导航控制器-C 接收通知触发事件pop回到导航控制器-B)
push push present
A -----> B -----> C --------> D
*/
-(void)backAction
{
//触发上一级导航控制器通知,pop回指定界面
[[NSNotificationCenterdefaultCenter]postNotificationName:@"popToB"object:nil];
//dismiss当前模态控制器(不加动画)
[selfdismissViewControllerAnimated:NOcompletion:nil];
}
在C界面的代码:
#pragma mark - 生命周期
- (void)viewDidLoad {
[superviewDidLoad];
self.title =@"C";
self.view.backgroundColor = [UIColorbrownColor];
UIButton * pushBtn = [UIButtonbuttonWithType:UIButtonTypeCustom];
[pushBtn setTitle:@"presentToD"forState:UIControlStateNormal];
[pushBtn setTitleColor:[UIColorwhiteColor]forState:UIControlStateNormal];
pushBtn.backgroundColor = [UIColorcyanColor];
pushBtn.layer.cornerRadius =5;
pushBtn.frame = CGRectMake(120, 120, 120, 60);
[pushBtn addTarget:selfaction:@selector(presentAction)forControlEvents:UIControlEventTouchUpInside];
[self.viewaddSubview:pushBtn];
//添加接收通知的观察者(popToB事件)
[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(notiPopToB)name:@"popToB"object:nil];
}
#pragma mark - 事件响应
/**
pop到指定界面B 通知响应事件
*/
-(void)notiPopToB
{
for (UIViewController *subVCinself.navigationController.viewControllers) {
if ([subVC isKindOfClass:[BViewController class]]) {
[self.navigationControllerpopToViewController:(BViewController *)subVCanimated:YES];
}
}
}
/**
present到D 点击事件
*/
-(void)presentAction
{
DViewController *DVC = [[DViewControlleralloc]init];
[selfpresentViewController:DVCanimated:YEScompletion:nil];
}
/**
注意:注销观察者
*/
-(void)dealloc
{
[[NSNotificationCenterdefaultCenter]removeObserver:selfname:@"popToB"object:nil];
}
第二种:push present present present A -----> B --------> C --------> D --------> E在E界面的返回事件:
/**
由 E 界面返回到 C 界面 点击事件(模态控制器-C)
push present present present
A -----> B --------> C --------> D --------> E
*/
-(void)backActionToCC
{
//获取到当前控制器的父控制器
UIViewController *superVC =self.presentingViewController;
//CCViewController要跳转的界面(模态控制器)
while (![superVC isKindOfClass:[CCViewController class]]) {
superVC = superVC.presentingViewController;
}
[superVC dismissViewControllerAnimated:YEScompletion:nil];
}
/**
由 E 界面返回到 B 界面 点击事件(导航控制器-B 继承于导航控制器-BaseNavigationVC,经log打印 C的模态父级控制器是 BaseNavigationVC* ,而不是 BViewController* ,所以这里判断将 BViewController 改为了 BaseNavigationVC )
push present present present
A -----> B --------> C --------> D --------> E
*/
-(void)back2ActionToBB
{
//获取到当前控制器的父控制器
UIViewController *superVC =self.presentingViewController;
//BBViewController要跳转的界面(导航控制器)
while (![superVC isKindOfClass:[BaseNavigationVC class]]) {
superVC = superVC.presentingViewController;
}
[superVC dismissViewControllerAnimated:YEScompletion:nil];
}
- iOS开发Push和Present混用返回指定控制器
- iOS 简单push和present混用退回根视图方法
- ios视图切换之push与present混用
- ios视图切换之push与present混用
- ios视图切换之push与present混用
- ios视图切换之push与present混用
- ios视图切换之push与present混用
- ios视图切换之push与present混用
- present和push混用,再跳转回来的问题
- ios开发:push与present的区别
- iOS 开发 push进入一个视图控制器,返回的时候删除中间某一个视图控制器
- 【iOS开发-21】UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
- iOS开发UINavigationController导航控制器初始化,导航控制器栈的push和pop跳转理解
- iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
- iOS开发-21UINavigationController导航控制器初始化 导航控制器栈的push和pop跳转理解
- IOS开发:xib和storyboard的混用
- Present和Push
- present和push
- 曲海佳:我是如何用PTENGINE提升信息流广告投放效果的
- 求绝对值最大值
- 网站分析的“十字箴言”
- 图像处理(五):八邻域边缘跟踪与区域生长算法
- 国外值得关注的十三家大数据与分析公司
- iOS开发Push和Present混用返回指定控制器
- 沃达丰:2017物联网市场晴雨表(附下载)
- web前端-HTML常用链接图像标签
- <meta name="" content="">的作用
- GSMA:2026年欧洲联网能源市场将达到260亿美元
- hdu 1238 Substrings
- 一个简单的注册表单验证保持原来输入的内容实例
- ceph配置中的osd_crush_update_on_start如何在osd重启时影响osd在crush中分布
- 调用百度AI实现人脸识别-Python