【问题标题】:parentViewController return null on IOSparentViewController 在 IOS 上返回 null
【发布时间】:2015-08-11 00:10:37
【问题描述】:

我正在使用此代码模态地展示一个视图控制器:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    SubmitAYoNViewController *ivc = [storyboard instantiateViewControllerWithIdentifier:@"SubmitAYoN"];
    [ivc setModalPresentationStyle:UIModalPresentationFullScreen];
    [self presentViewController:ivc animated:YES completion:nil];

然后在我的 SubmitAYoNViewController 我有这个:

  NSLog(@"%@",self.parentViewController);
    if([self.parentViewController isKindOfClass:[YesOrNoViewController class]]) {
        NSLog(@"do something");
}

self.parentVeiwController 为 NULL。这是为什么呢?

编辑:我想从我的父视图控制器访问一个方法,然后是打开 SubmitAYoN 的方法。

解决方案:我使用了委托。根据下面的答案,presentViewController 不会创建父子关系。

【问题讨论】:

  • 您在故事板中检查了您的标识符?是@“SubmitAYoN”吗?
  • @iDev 是的,标识符是正确的,因为新视图正确打开,其他一切似乎都在该 vc 中工作。
  • 如果你想要展示视图控制器,那么使用self.presentingViewControllerself.parentViewController 返回控制器的父级,当它不是另一个控制器的子级时将为 nil。
  • @RoryMcKinnel 如果我使用 presentViewController 打开它不是孩子吗?
  • @ghostrider。来自presentViewController 的文档:“此方法将presentedViewController 属性设置为指定的视图控制器,根据呈现样式调整该视图控制器的视图大小,然后将视图添加到视图层次结构中。”因此,没有提到将控制器作为子视图作为添加到现有视图层次结构的视图。所以我很确定你需要使用self.presentingViewController

标签: ios model-view-controller uiviewcontroller


【解决方案1】:

如果您想要呈现视图控制器,请使用self.presentingViewControllerself.parentViewController 返回控制器的父级,当它不是另一个控制器的子级时将为 nil。

所以使用:

NSLog(@"%@",self.presentingViewController);
if([self.presentingViewController isKindOfClass:[YesOrNoViewController class]]) {
   NSLog(@"do something");
}

来自presentViewController: 的文档

此方法将presentedViewController 属性设置为指定的 视图控制器,根据 表示样式,然后将视图添加到视图层次结构中。

所以没有提到控制器被设为子,因为它是添加到现有视图层次结构中的视图。

在 iOS5 之前你会没事的。属性parentViewController 的文档指出:

在 iOS 5.0 之前,如果视图没有父视图控制器并且 正在呈现,呈现视图控制器将被返回。 在 iOS 5 上,此行为不再发生。相反,使用 presentingViewController 属性以访问呈现视图 控制器。

【讨论】:

    【解决方案2】:

    self.parentViewController 是您通过此viewcontrollerself.navigationgtionController 呈现的东西

    所以当你展示一个 viewcontroller 时,你持有一个 `viewcontroller' 的实例将有 self.parentViewController。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2019-07-15
      • 2013-04-20
      相关资源
      最近更新 更多