iOS切换window根控制器
来源:互联网 发布:淘宝steam游戏安全吗 编辑:程序博客网 时间:2024/05/15 06:01
在运行过程中更改根控制器的方法:(假设:A为当前根控制器,B为要设的根控制器)
方法一:
1. appdelegate.m中
2. A.m中添加设置,比如一个按钮跳转到B并在B中设置B为根控制器
事件如下:
3. 注意点出来了,如果使用的是presentViewController则在设置B为根控制器的方法就必须在viewDidLoad与viewWillAppear之后进行设置。不然如下
问题出来了:
个人分析:因为在没有present之前就已经走过这个方法了,如果在其中设置更改根控制器就会导致A不在window的层级中,无法presentViewController,事后使用会出现许多问题。
如果使用insertSubView便没有这个问题
4. B中更改根控制器:(建议在控制器已经完全在window上展示再切换window的根控制器)
遗留问题:A控制器已经没有用处了,怎样将其销毁
方法二:(提供个基本思路,实际情况大家研究下了)
可以创建多个window,在执行完成后可以设置其window为self.window,并让其成为key window,然后只要想使用的话就只可以将self.window赋值想要展示的window可此时销毁刚才的window,然后再将[self.window makeKeyandVisible];
方法一:
1. appdelegate.m中
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; A *vc = [[A alloc] init]; // init会执行viewDidLoad viewWillAppear vc.view.backgroundColor = [UIColor redColor]; self.window.rootViewController = vc; [self.window makeKeyAndVisible];
2. A.m中添加设置,比如一个按钮跳转到B并在B中设置B为根控制器
事件如下:
- (void)btnClick:(UIButton *)sender { B *second = [[B alloc] init]; second.view.backgroundColor = [UIColor blueColor]; [self presentViewController:second animated:YES completion:nil];// [self.view.window insertSubview:second.view aboveSubview:self.view];}
3. 注意点出来了,如果使用的是presentViewController则在设置B为根控制器的方法就必须在viewDidLoad与viewWillAppear之后进行设置。不然如下
问题出来了:
Attempt to present <SecondViewController: 0x7fad63e0b470> on <ViewController: 0x7fad63d28dd0> whose view is not in the window hierarchy!
个人分析:因为在没有present之前就已经走过这个方法了,如果在其中设置更改根控制器就会导致A不在window的层级中,无法presentViewController,事后使用会出现许多问题。
如果使用insertSubView便没有这个问题
4. B中更改根控制器:(建议在控制器已经完全在window上展示再切换window的根控制器)
- (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; AppDelegate *app = [UIApplication sharedApplication].delegate; // 获取当前app单例 NSLog(@"appdelegate is %@",app); UIViewController *vc = app.window.rootViewController; app.window.rootViewController = self; [vc removeFromParentViewController]; NSLog(@"当前的根控制器为:%@",self.view.window.rootViewController);}
遗留问题:A控制器已经没有用处了,怎样将其销毁
A.view = nil; // 这样就会直接去调用A的viewDidUnload 方法,将当前控制器销毁,并不是立即去调用,而是要花点时间,就像是
方法二:(提供个基本思路,实际情况大家研究下了)
可以创建多个window,在执行完成后可以设置其window为self.window,并让其成为key window,然后只要想使用的话就只可以将self.window赋值想要展示的window可此时销毁刚才的window,然后再将[self.window makeKeyandVisible];
0 0
- iOS切换window根控制器
- iOS window添加视频view或图片view,并有切换根视图控制器的时候注意
- ios多控制器切换
- iOS多控制器-视图切换.
- iOS 【通过sb加载描述window根控制器的view】
- iOS 【通过xib加载描述window根控制器的view】
- iOS 一一 根据storyBoard加载window根控制器的View
- iOS 一一 根据xib加载window根控制器的View
- 根控制器切换
- IOS 视图控制器间的切换
- IOS-Storyboard控制器切换之Modal(1)
- IOS-Storyboard控制器切换之Push(2)
- IOS-Storyboard控制器切换之TabBar(3)
- IOS-Storyboard控制器切换之Modal
- IOS 控制器切换的动画样式
- ios学习笔记:控制器的切换
- iOS --切换控制器方式 push / modal
- iOS - 多控制器切换一(巧用tabbarController)
- 修改MyEclipse中Jsp中JavaScript背景色
- java基础之RandomAccessFile类的使用
- 简单的Ajax 技术
- Spring中,在继承JdbcDaoSupport时,出现The type org.springframework.dao.support.DaoSupport cannot be resolved.
- oracle is not in the sudoers file.This incident will be reported
- iOS切换window根控制器
- Android 对回调的理解
- MapReduce编程实例之倒排索引 1
- HTML5的WebSocket
- html select下拉菜单 从数据库中读取 ajax
- hdu 1710 Binary Tree Traversals
- 数组的基本操作(一)
- Spring MVC防御CSRF、XSS和SQL注入攻击
- 移动App测试实战——专项测试