LoginViewController在登录后会present到一个UINavigationController,在这个UINavigationController中,会有监听事件,监听到后会present到另一个新的UINavigationController,这个错误就是跳转的时候引起的,我用的-(UIViewController *)getCurrentRootViewController这个函数来获取当前顶层的控制器,可是到ios8环境下,这个检测不到LoginViewController以后全部得viewcontroller,好像只能显示window的rootviewcontroller请问怎么解决php
//获取当前viewcontroller -(UIViewController *)getCurrentRootViewController { UIViewController *result; // Try to find the root view controller programmically // Find the top window (that is not an alert view or other window) UIWindow *topWindow = [[UIApplication sharedApplication] keyWindow]; if (topWindow.windowLevel != UIWindowLevelNormal) { NSArray *windows = [[UIApplication sharedApplication] windows]; for(topWindow in windows) { if (topWindow.windowLevel == UIWindowLevelNormal) break; } } UIView *rootView = [[topWindow subviews] objectAtIndex:0]; id nextResponder = [rootView nextResponder]; if ([nextResponder isKindOfClass:[UIViewController class]]) result = nextResponder; else if ([topWindow respondsToSelector:@selector(rootViewController)] && topWindow.rootViewController != nil) result = topWindow.rootViewController; else NSAssert(NO, @"ShareKit: Could not find a root view controller. You can assign one manually by calling [[SHK currentHelper] setRootViewController:YOURROOTVIEWCONTROLLER]."); return result; }
1.解决方法:ios
看了一下你的代码,你不该该用 [self getCurrentRootViewController] 去present , 由于当第一次present以后,此时window上面的顶级视图是 ffViewController ,这时候若是你继续present 须要 用 ffViewController 这个对象。 我大概理解你的想法是 想当前的controller 直接 模态 经过我下面的函数能够获取当前的controller ( [[self topViewController] presentViewController:[[UIViewController alloc] init] animated:YES completion:nil];) - (UIViewController*)topViewController { return [self topViewControllerWithRootViewController:self.window.rootViewController]; } - (UIViewController*)topViewControllerWithRootViewController:(UIViewController*)rootViewController { if ([rootViewController isKindOfClass:[UITabBarController class]]) { UITabBarController *tabBarController = (UITabBarController *)rootViewController; return [self topViewControllerWithRootViewController:tabBarController.selectedViewController]; } else if ([rootViewController isKindOfClass:[UINavigationController class]]) { UINavigationController* navigationController = (UINavigationController*)rootViewController; return [self topViewControllerWithRootViewController:navigationController.visibleViewController]; } else if (rootViewController.presentedViewController) { UIViewController* presentedViewController = rootViewController.presentedViewController; return [self topViewControllerWithRootViewController:presentedViewController]; } else { return rootViewController; } }
参考:http://www.cocoachina.com/bbs/read.php?tid=295517windows