在项目中遇到了一个问题,就是项目的需求是在用户退到后台的时候再次进入软件要出现一个手势密码的界面,开始我是这样写的:
_openLockView = [[OpenLockViewController alloc] init];
UINavigationController *openNav = [[UINavigationController alloc] initWithRootViewController:_openLockView];
[self.window.rootViewController presentViewController:openNav animated:YES completion:nil];这种想法就是用户退到后台的时候会调用APPDelegate中的-(void)applicationDidEnterBackground:(UIApplication *)application ,将上述的代码写到这个方法里,就能保证退到后台出现手势密码,但是问题也来了,对于push进来的页面都是没有问题的,界面时present进来的就会出现问题,退出时就不能保证出现手势密码。这个怎么解决呢?我们可以在退到后台的时候找到最上面的界面是什么界面,然后将手势密码界面present进来就能够解决了,这个最关键的就是找到最上面的界面:- (UIViewController *)currentViewController{
UIWindow *window = [UIApplication sharedApplication].keyWindow;
UIViewController *vc = window.rootViewController;
while (1) {
if ([vc isKindOfClass:[UITabBarController class]]) {
vc = ((UITabBarController *)vc).selectedViewController;
}
if ([vc isKindOfClass:[UINavigationController class]]) {
vc = ((UINavigationController *)vc).visibleViewController;
}
if (vc.presentedViewController) {
vc = vc.presentedViewController;
}else{
break;
}
}
return vc;
}通过这样的方法,我们就可以得到最上面的界面,无论在什么情况下退到后台都能得到,将手势界面present进去。
在iOS项目中,为了在用户从后台返回时显示手势密码界面,需要在`applicationDidEnterBackground:`方法中处理。遇到的问题是,presented的界面无法确保手势密码界面始终在顶部。解决方案是通过遍历窗口和控制器层级,找到最上层的UIViewController,并呈现手势密码视图控制器。
648

被折叠的 条评论
为什么被折叠?



