从NSObject类文件获取当前视图控制器

4

我有一个用于检测网络连接的NSObject文件。如果它掉线,我想在当前视图控制器的导航栏顶部显示一个活动指示器。我的故事板配置是一个带有三个选项卡的tabbarcontroller。每个选项卡通过单独的导航控制器连接到多个视图控制器(即每个选项卡都有一个导航控制器)。

我想获取当前的视图控制器并显示活动指示器,但无法获取当前显示的视图控制器。我已尝试了下面的代码,但不起作用。有人能给我建议吗?

   UIViewController *topViewController = [UIApplication sharedApplication].keyWindow.rootViewController;
   UIActivityIndicatorView *aiView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleGray];
   aiView.hidesWhenStopped = NO; //I added this just so I could see it
   topViewController.navigationItem.titleView = aiView;
4个回答

12

你可以尝试这个方法。我曾经在我的应用程序中使用它来从一个NSObject文件中显示任何视图:

UIWindow *window=[UIApplication sharedApplication].keyWindow;
UIViewController *vc = [window rootViewController];

1
希望这对您有用。
UIViewController *currentVc = [(UINavigationController *)[UIApplication sharedApplication].delegate.window.rootViewController topViewController];

在项目中,您必须将UINavigationController用作UIWindow的rootViewController。


1
你可以使用visibleViewController属性。
UIWindow *window=[UIApplication sharedApplication].keyWindow;
UIViewController *currentVc=[window.rootViewController.navigationController visibleViewController];

0

请检查您的

#import <UIKit/UIKit.h> 

大多数成员都未能测试它,如果您可以使用它,那么只有窗口和UIViewController才能访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接