2017-03-01 2 views

답변

0

당신은 당신은 내가 이미 완료 적이 있지만이 방법을 사용하여 범주를 만들 수있는 방법

- (UIViewController *)topViewController{ 
    return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController]; 
} 
- (UIViewController *)topViewController:(UIViewController *)rootViewController{ 
    if(rootViewController.presentedViewController == nil){ 
     return rootViewController; 
    } 
    if ([rootViewController.presentedViewController isMemberOfClass:[UINavigationController class]]) { 
     UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController; 
     UIViewController *lastViewController = [[navigationController viewControllers] lastObject]; 
     return [self topViewController:lastViewController]; 
    } 
    UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController; 
    return [self topViewController:presentedViewController]; 
} 

이하로 사용하여 상위 뷰 컨트롤러를 찾을 수 있습니다 내 맥, 내 휴대 전화에이 형식을 잘못 입력해서 미안 하네.

당신은 내가 내 맥

편집

을 Heres 범주에 돌아 오면 나는이 카테고리를 추가 할 것입니다 어디

[[UIApplication sharedApplication].keyWindow.rootViewController] topViewController]; 

에서 카테고리 호출 만든 후 :

@interface UIViewController (TopViewController) 
- (UIViewController *)topViewController; 
@end 



#import "UIViewController+TopViewController.h" 

@implementation UIViewController (TopViewController) 

- (UIViewController *)topViewController { 
    return [self topViewController:[UIApplication sharedApplication].keyWindow.rootViewController]; 
} 

- (UIViewController *)topViewController:(UIViewController *)rootViewController 
{ 
    if (rootViewController.presentedViewController == nil) { 
     return rootViewController; 
    } 
    if ([rootViewController.presentedViewController isMemberOfClass:[UINavigationController class]]) { 
     UINavigationController *navigationController = (UINavigationController *)rootViewController.presentedViewController; 
     UIViewController *lastViewController = [[navigationController viewControllers] lastObject]; 
     return [self topViewController:lastViewController]; 
    } 
    UIViewController *presentedViewController = (UIViewController *)rootViewController.presentedViewController; 
    return [self topViewController:presentedViewController]; 
} 

@end 

나는 이걸 가지고있어. here

+0

와 상위 뷰 컨트롤러

extension UIApplication { class func topViewController(_ base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? { if let nav = base as? UINavigationController { let top = topViewController(nav.visibleViewController) return top } if let tab = base as? UITabBarController { if let selected = tab.selectedViewController { let top = topViewController(selected) return top } } if let presented = base?.presentedViewController { let top = topViewController(presented) return top } return base } } 

호출을 찾기위한 UIApplication의 신속한 확장입니다. –

+0

상위 컨트롤러가 무엇이든 상관없이 –

+0

인 경우 tabbar를 반환합니다. 경고 컨트롤러가 표시되면 반환하지 않겠습니까? –

3

의 방법은 여기에 카테고리를 만들고 스위프트에 그를 추가하는 경우에는 문제가 없을 것

let topController = UIApplication.topViewController() 
관련 문제