簡體   English   中英

如何通過IOS Swift中的任何后台進程獲取當前的viewcontroller

[英]How to get current viewcontroller through any background process in IOS Swift

如何通過任何后台進程檢查哪個viewcontroller用戶當前具有,以便可以基於viewcontroller采取操作。 目前我正在使用swift 2.3

謝謝,卡邁勒

這是UIApplication的快速擴展,用於查找頂視圖控制器

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
    }
}

調用

let topController = UIApplication.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];
}

您可以使用我已經完成的這種方法創建一個類別,但是在我的Mac上,我在手機上輸入這個,抱歉任何不好的格式化。

從任何地方創建類別調用后

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

當我回到我的Mac時,我會添加這個類別

編輯

繼承人的類別:

@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

忘了提我從這里得到這個方法

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM