presentingViewController 显示为 null
Posted
技术标签:
【中文标题】presentingViewController 显示为 null【英文标题】:presentingViewController shows up as null 【发布时间】:2014-10-25 18:53:37 【问题描述】:我有三个视图控制器连接到一个标签栏控制器,我认为应该自动设置presentingViewController/presentedViewController。但是,当我在视图控制器之间切换并记录 [self presentingViewController] 时,它会记录为空。我将日志放在每个视图控制器的 viewDidAppear 方法中。
-(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:YES];
NSLog(@" my presenting view controller is %@", [self presentingViewController]);
输出:
my presenting view controller is (null)
【问题讨论】:
presentingViewController 属性设置为向您展示的控制器——这意味着它是通过模态展示或 segue 来实现的。在标签栏控制器中切换标签不是演示。 不,它不是“呈现”,而是出现在屏幕上。在presentingViewController 和presentedViewController 的上下文中,表示表示模式表示。你在这里的意图是什么?您是否想弄清楚您来自哪个标签? 【参考方案1】:如果你想知道你来自哪个标签,那么你应该继承标签栏控制器,并将其设置为自己的委托。创建一个整数属性 oldIndex ,您可以在委托方法中的选项卡切换之前设置它,tabBarController:shouldSelectViewController:.
@interface RDTBC () <UITabBarControllerDelegate>
@end
@implementation RDTBC
- (void)viewDidLoad
[super viewDidLoad];
self.delegate = self;
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController
self.oldIndex = self.selectedIndex;
return YES;
然后在你的视图控制器中,你可以这样获取,
-(void)viewDidAppear:(BOOL)animated
[super viewDidAppear:animated];
NSLog(@"%ld",[(RDTBC *)self.tabBarController oldIndex]);
【讨论】:
感谢您的建议。我会试一试,并会更新你。【参考方案2】:让一个选项卡的行为依赖于上次显示的选项卡可能不是一个好主意。选项卡旨在独立运行。
【讨论】:
我有需要跨多个选项卡访问的数据。所以对于我的实现,我的标签确实相互依赖。以上是关于presentingViewController 显示为 null的主要内容,如果未能解决你的问题,请参考以下文章
presentingViewController 总是得到 UITabBarController
presentingViewController 显示为 null
为啥解散presentingViewController,只解散子控制器?