星空网 > 软件开发 > 操作系统

获取窗口当前显示的控制器

解决类似网易新闻客户端收到新闻推送后,弹出一个UIAlert,然后跳转到新闻详情页面这种需求

1.提供一个UIView的分类方法,这个方法通过响应者链条获取view所在的控制器

- (UIViewController *)parentController{  UIResponder *responder = [self nextResponder];  while (responder) {    if ([responder isKindOfClass:[UIViewController class]]) {      return (UIViewController *)responder;    }    responder = [responder nextResponder];  }  return nil;}

2.通过控制器的布局视图可以获取到控制器实例对象

   modal的展现方式需要取到控制器的根视图

+ (UIViewController *)currentViewController{  UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;  // modal展现方式的底层视图不同  // 取到第一层时,取到的是UITransitionView,通过这个view拿不到控制器  UIView *firstLayoutContainerView = [keyWindow.subviews firstObject];  UIView *secondLayoutContainerView = [firstLayoutContainerView.subviews firstObject];  UIViewController *vc = secondLayoutContainerView.parentController;  if ([vc isKindOfClass:[UITabBarController class]]) {    UITabBarController *tab = (UITabBarController *)vc;    if ([tab.selectedViewController isKindOfClass:[UINavigationController class]]) {      UINavigationController *nav = (UINavigationController *)tab.selectedViewController;      return [nav.viewControllers lastObject];    } else {      return tab.selectedViewController;    }  } else if ([vc isKindOfClass:[UINavigationController class]]) {    UINavigationController *nav = (UINavigationController *)vc;    return [nav.viewControllers lastObject];  } else {    return vc;  }  return nil;}

 




原标题:获取窗口当前显示的控制器

关键词:

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

DTDEX:https://www.ikjzd.com/w/1971
Perfee,南亚电商平台:https://www.ikjzd.com/w/1972
Amazon Discount Finder:https://www.ikjzd.com/w/1973
mozBar:https://www.ikjzd.com/w/1974
凯沃集团:https://www.ikjzd.com/w/1975
欧德易:https://www.ikjzd.com/w/1976
​TikTok发生了什么?美区增长首次停滞,准入管理力度加大:https://www.kjdsnews.com/a/1836407.html
2024年如何找到在TikTok上发帖的最佳时间:https://www.kjdsnews.com/a/1836408.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流