获取窗口当前显示的控制器
2016-05-27 18:59
344 查看
解决类似网易新闻客户端收到新闻推送后,弹出一个UIAlert,然后跳转到新闻详情页面这种需求
1.提供一个UIView的分类方法,这个方法通过响应者链条获取view所在的控制器
2.通过控制器的布局视图可以获取到控制器实例对象
modal的展现方式需要取到控制器的根视图
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; }
相关文章推荐
- 规范之力:正确使用UIViewController(1)
- 规范之力:正确使用UIViewController(2)
- iOS5中UIViewController的新方法
- 复用项目中的刷新加载
- ios中navigation controller的漂移问题
- swift 重写方法不同参数同方法名问题
- UITableView介绍 之 基本用法
- IOS Multipage(多页面)程序开发,UITabBarController
- 获取当前处于activity状态的view controller
- 试图控制器。生命周期UIViewController
- 在UIView中与UIViewController中画图
- IOS-UITableView编辑模式
- storyboard中exit用发,返回原来页面
- 左右侧滑原理与实现方式
- UIViewController的完整生命周期
- UIViewController
- willMoveToParentViewController和didMoveToParentViewController
- UIViewController
- ios学习笔记(六)视图控制器
- ios 跳转数据的传递