获取窗口当前显示的控制器
2016-04-27 11:41
218 查看
转:http://www.knowsky.com/883628.html
解决类似网易新闻客户端收到新闻推送后,弹出一个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 *firstView = [keyWindow.subviews firstObject]; UIView *secondView = [firstView.subviews firstObject]; UIViewController *vc = secondView.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; }
相关文章推荐
- C#墨攻IOC
- websocket
- httpwebrequest详解
- Gitlab管理下本地Git配置
- Map集合中value()方法与keySet()、entrySet()区别
- AppDelegate中几个常用的回调调用时机
- linux 开机自动启动 shell
- java新手学习
- 用PS把自已或其他人照片放进玻璃瓶效果
- MyEclipse部署到tomcat上的项目名不是我更改后的项目名怎么解决
- PHP关于VC11,VC9,VC6以及Thread Safe和Non Thread Safe版本选择的问题
- Log4j使用笔记
- 卡牌游戏
- c++ 覆盖、重载与隐藏 浅析
- 两种方法求两个数的最大公约数和最小公倍数--C语言
- Ubuntu下切换用户免密与smb挂载开启
- Servlet课程0426(十一)Servlet Cookie实现两周内不用重复登录
- dddd0427 沙河机制
- HDU 1914 The Stable Marriage Problem 稳定婚姻关系
- 高德地图SDK中AMapNaviView崩溃