// 获取当前处于activity状态的view controller- (UIViewController *)activityViewController{UIViewController* activityViewController = nil;UIWindow *window = [[UIApplication sharedApplication] keyWindow];if(window.windowLevel != UIWindowLevelNormal){ NSArray *windows = [[UIApplication sharedApplication] windows]; for(UIWindow *tmpWin in windows) { if(tmpWin.windowLevel == UIWindowLevelNormal) { window = tmpWin; break; } } }NSArray *viewsArray = [window subviews];if([viewsArray count] > 0){ UIView *frontView = [viewsArray objectAtIndex:0]; id nextResponder = [frontView nextResponder]; if([nextResponder isKindOfClass:[UIViewController class]]) { activityViewController = nextResponder; } else { activityViewController = window.rootViewController; }}return activityViewController;}复制代码
这些代码返回的是最上层的控制器,但不一定是当前控制器
- 如果你是navgation 嵌套的层级并且push出来多个控制器,
UINavigationController *vc = (UINavigationController *)[self activityViewController]; UIViewController *topVC = vc.topViewController;复制代码
- 如果是model方式弹出的控制器
UIViewController *topVC = vc.visibleViewController;复制代码
这样获取的topVC就是最上层的控制器了!