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];
'프로그래밍 > iOS' 카테고리의 다른 글
[iOS] 원형 뷰 만드는 법 (0) | 2017.09.20 |
---|---|
[iOS] BGRA를 RGBA로 변경 (0) | 2017.08.07 |
[iOS] 단말 정보 가져오기 (0) | 2017.04.18 |
[iOS] UITableView section 수정하기(folderable) (0) | 2017.04.06 |
[iOS] XCode8.3 에러내용 확인하기 (0) | 2017.04.05 |