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