본문 바로가기

프로그래밍/iOS

[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];