我使用此代码以模态方式呈现视图控制器:
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不会创建父子关系。
答案 0 :(得分:3)
如果您想要呈现视图控制器,请使用self.presentingViewController
。 self.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
是您通过此viewcontroller
或self.navigationgtionController
所以,当你展示一个viewcontroller
时,你持有一个`viewcontroller'的实例。将有self.parentViewController。