【问题标题】:presentingViewController shows up as nullpresentingViewController 显示为 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 的上下文中,表示表示模式表示。你在这里的意图是什么?您是否想弄清楚您来自哪个标签?

标签: ios objective-c xcode ios7


【解决方案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】:

让一个选项卡的行为依赖于上次显示的选项卡可能不是一个好主意。选项卡旨在独立运行。

【讨论】:

  • 我有需要跨多个选项卡访问的数据。所以对于我的实现,我的标签确实相互依赖。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-11
  • 2017-10-11
  • 1970-01-01
  • 2011-04-25
  • 2018-10-11
相关资源
最近更新 更多