parentViewController在IOS

时间:2015-05-28 13:01:12

标签: ios model-view-controller uiviewcontroller

我使用此代码以模态方式呈现视图控制器:

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不会创建父子关系。

2 个答案:

答案 0 :(得分:3)

如果您想要呈现视图控制器,请使用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属性可访问呈现视图   控制器。

答案 1 :(得分:0)

self.parentViewController是您通过此viewcontrollerself.navigationgtionController

提供的内容

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