我的应用程序的主窗口包含一个基于xib的UITabBarController(在Interface Builder中完全配置),也可以以模式显示(就像Music.app“添加歌曲到播放列表”模态视图). UITabBarController包含一些UINavigationController,它们又包含子类的UITableViewController.这是我当前正在检测的子类UITableViewController是否被呈现在一个模态的UITabBarController中:
- (void)viewDidLoad { [super viewDidLoad]; self.isModal = NO; UIViewController *child = self; UIViewController *parent = self.parentViewController; while (parent) { if (parent.modalViewController && parent.modalViewController == child) { self.isModal = YES; break; } child = parent; parent = parent.parentViewController; } if (self.isModal) { // modal additions,eg. Done button,navigationItem.prompt } else { // normal additions,eg. Now Playing button } }
有没有办法做到这一点,不涉及走上parentViewController树,或者将所有中间视图控制器子类化,以便在初始化时传递isModal状态?
解决方法
如果您正在寻找iOS 6,此答案已被弃用,您应该检查
Gabriele Petronella’s answer
之前我回答了一个非常类似的问题,在那里我有一个功能来确定当前控制器是否被呈现为模态,而不需要在此处对标签栏控制器进行子类化:
Is it possible to determine whether ViewController is presented as Modal?
在原来的答案中,有一些关于这个功能如何工作的基本解释,如果需要,你可以在那里检查,但是在这里
-(BOOL)isModal { BOOL isModal = ((self.parentViewController && self.parentViewController.modalViewController == self) || //or if I have a navigation controller,check if its parent modal view controller is self navigation controller ( self.navigationController && self.navigationController.parentViewController && self.navigationController.parentViewController.modalViewController == self.navigationController) || //or if the parent of my UITabBarController is also a UITabBarController class,then there is no way to do that,except by using a modal presentation [[[self tabBarController] parentViewController] isKindOfClass:[UITabBarController class]]); //iOS 5+ if (!isModal && [self respondsToSelector:@selector(presentingViewController)]) { isModal = ((self.presentingViewController && self.presentingViewController.modalViewController == self) || //or if I have a navigation controller,check if its parent modal view controller is self navigation controller (self.navigationController && self.navigationController.presentingViewController && self.navigationController.presentingViewController.modalViewController == self.navigationController) || //or if the parent of my UITabBarController is also a UITabBarController class,except by using a modal presentation [[[self tabBarController] presentingViewController] isKindOfClass:[UITabBarController class]]); } return isModal; }
原文地址:https://www.jb51.cc/c/111704.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。