2017-03-01 3 views
3

viewcontrollerに基づいてアクションを実行できるように、どのViewControllerユーザーが現在バックグラウンドプロセスによって持っているかをチェックする方法。現在、私はあなたが私はすでに上で行われますがきた。この方法を使用してカテゴリを作成することができますが、方法IOS Swiftの任意のバックグラウンドプロセスを使用して現在のviewcontrollerを取得する方法

- (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]; 
} 

の下に使用したトップビューコントローラを見つけることができます迅速2.3

おかげで、 カマル

答えて

0

を使用しています私のMac、私は自分の携帯電話でこれをタイプしています。申し訳ありません、フォーマットが間違っています。

あなたはどこにでも

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

からカテゴリのコールを作成した後、私は戻ってHERESにカテゴリ私のMac

EDIT

に得るとき、私は、このカテゴリを追加します:

@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

の場合はタブバーを返します。警告コントローラーが表示されている場合は返されませんか? –

3

からの方法は、ここでは、カテゴリを作成し、スウィフトにそれを追加した場合何の問題があってはなりませう

let topController = UIApplication.topViewController() 
関連する問題