[iOS] topViewController 가져오기
presentViewController를 했는데 반응이 없는경우의 대부분은 현재 뷰컨트롤러의 뷰가 가장 최 상단에 있지 않기 때문에 동작을 안하는 경우가 많다.
따라서 항상 topViewController를 가져오는 법 기술
AppDelegate.h
/**
@brief 항상 topViewcontroller를 반환하는 함수
@return topViewController
*/
- (UIViewController*)topViewController; // 함수 선언
AppDelegate.m
#pragma mark - Other
- (UIViewController*)topViewController {
return [self topViewControllerWithRootViewController:[UIApplication sharedApplication].keyWindow.rootViewController];
}
/**
@brief 다양한 경우의 topViewcontroller를 반환하는 함수
@return topViewController
*/
- (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;
}
}
실제 코드.m
[(AppDelegate *)[UIApplication sharedApplication].delegate topViewController presentViewController:뷰컨트롤러 animated:YES complication:nil];