我们可能会有这样的需要:
在视图控制器A present 到视图控制器B 之前,需要在B中拿到A,也就是拿到当前视图所在的视图控制器。
//拿到被present的控制器
- (UIViewController *)presentingViewController {
UIWindow *currentWindow = [UIApplication sharedApplication].windows.firstObject;
UIView *currentView = currentWindow.subviews.firstObject;
UIViewController *vc = [self parentController:currentView];
if ([vc isKindOfClass:[UITabBarController class]]) {
UITabBarController *tabVC = (UITabBarController *)vc;
vc = tabVC.selectedViewController;
}
if ([vc isKindOfClass:[UINavigationController class]]) {
UINavigationController *nagVC = (UINavigationController *)vc;
vc = nagVC.viewControllers.lastObject;
}
return vc;
}
//获取视图所在的控制器
- (UIViewController *)parentController:(UIView *)view
{
UIResponder *responder = [view nextResponder];
while (responder) {
if ([responder isKindOfClass:[UIViewController class]]) {
return (UIViewController *)responder;
}
responder = [responder nextResponder];
}
return nil;
}