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”

presentingViewController 总是得到 UITabBarController

presentingViewController 显示为 null

为啥解散presentingViewController,只解散子控制器?

“GIDSignIn”类型的值没有成员“presentingViewController”

使用 presentingViewController 关闭 viewController