需要展示alert时,如何获知当前 view controller

需求是这样:

  1. app 在运行中(处于前台)
  2. app 收到一个推送通知
  3. app 需要根据推送通知展示一个 alert

请问app在收到推送时,如何知道当前是哪个 view controller 正在显示中?

在 app delegate 中处理似乎不太好。因为有可能展示的不是 alert 而是自定义 view

阅读 4.9k
2 个回答

可以试试这个:

//获取当前屏幕显示的viewcontroller  
- (UIViewController *)getCurrentVC  
{  
    UIViewController *result = nil;  

    UIWindow * window = [[UIApplication sharedApplication] keyWindow];  
    if (window.windowLevel != UIWindowLevelNormal)  
    {  
        NSArray *windows = [[UIApplication sharedApplication] windows];  
        for(UIWindow * tmpWin in windows)  
        {  
            if (tmpWin.windowLevel == UIWindowLevelNormal)  
            {  
                window = tmpWin;  
                break;  
            }  
        }  
    }  

    UIView *frontView = [[window subviews] objectAtIndex:0];  
    id nextResponder = [frontView nextResponder];  

    if ([nextResponder isKindOfClass:[UIViewController class]])  
        result = nextResponder;  
    else  
        result = window.rootViewController;  

    return result;  
}  

参考:http://blog.csdn.net/worldzhy/article/details/42120929

我一般的做法是,整个应用程序保证只有一个UINavigationController,这样就可以把它做成单例RootNavigationController
想要获取当前控制器就这样RootNavigationController.shared.viewControllers.firstObject;

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题