【问题标题】:How to determine what view controller presented the current view controller? (iphone)如何确定当前视图控制器呈现的是哪个视图控制器? (苹果手机)
【发布时间】:2014-01-30 20:02:27
【问题描述】:

根据呈现当前视图控制器的视图控制器,我需要当前视图控制器被两个呈现视图控制器中的任何一个解除。

这是当前视图控制器中的方法:

-(void)goBack:(id)sender {
if ([self.presentingViewController.presentingViewController isKindOfClass:[InitialViewController class]])
    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];

else {
    [self.presentingViewController.presentingViewController dismissViewControllerAnimated:YES completion:nil];

}

但它不起作用。我究竟做错了什么?非常感谢您!

【问题讨论】:

  • 也许你应该多描述一下架构。您确定这是呈现的视图控制器情况而不是推送/弹出情况吗?如果是,您想区分什么?您真正想实现什么?
  • 另外,请注意您所说的presentViewController 的视图控制器实际上可能不是presentingViewController。很容易对此感到困惑。
  • 是的,对不起,我应该更准确。在某些情况下,我当前的视图控制器由 SecondViewController 呈现,以防万一由 FirstViewController 呈现。在其他情况下,我当前的视图由 FirstViewController 直接呈现。我的目标是,当当前视图控制器被关闭时,FirstViewController 会出现。
  • 在这种情况下self.presentingViewController.presentingViewController 应该可以工作。它适用于我的机器。
  • 可能问题是你在if/else 测试中写错了条件。使用日志记录来确保所做的选择是您所期望的。

标签: ios iphone objective-c uiviewcontroller


【解决方案1】:

您解雇的方法没有任何问题(尽管我之前的回答错误!)。有什么问题是你的逻辑。问题是这一行:

if ([self.presentingViewController.presentingViewController isKindOfClass:[InitialViewController class]])

改成:

if ([self.presentingViewController isKindOfClass:[SecondViewController class])

这应该完全符合您的要求。

【讨论】:

    【解决方案2】:

    如果您想获取呈现特定视图控制器的视图控制器,只需执行viewController.presentingViewController。这应该始终设置为呈现当前视图控制器的任何视图控制器,这就是重点。因此,如果您想关闭当前视图控制器,请执行以下操作:

    [self.presentingViewController dismissViewControllerAnimated:YES completion:nil];
    

    【讨论】:

      猜你喜欢
      • 2013-02-10
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 2017-07-09
      • 2015-07-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多