我正在使用以下代码提供一个视图控制器:
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为空。为什么会这样呢?
编辑:我想从父视图控制器访问一个方法,然后是打开SubmitAYoN的方法。
解决方案:我使用了委托。如下所示,presentViewController不创建父子关系.
发布于 2015-05-28 05:35:17
如果您想要呈现视图控制器,那么使用self.presentingViewController
。self.parentViewController
返回控制器父级,当它不是另一个控制器的子控制器时,它将为零。
因此,请使用:
NSLog(@"%@",self.presentingViewController);
if([self.presentingViewController isKindOfClass:[YesOrNoViewController class]]) {
NSLog(@"do something");
}
来自presentViewController:
的文档
此方法将
presentedViewController
属性设置为指定的视图控制器,根据表示样式调整视图控制器的视图大小,然后将视图添加到视图层次结构中。
因此,没有提到控制器是子级的,因为将视图添加到现有的视图层次结构中。
在iOS5之前你会没事的。属性parentViewController
的文档声明:
在iOS 5.0之前,如果视图没有父视图控制器并正在呈现,则将返回呈现视图控制器。在iOS 5上,这种行为不再发生。相反,使用
presentingViewController
属性访问呈现视图控制器。
发布于 2015-05-28 05:08:11
self.parentViewController
是你从viewcontroller
或self.navigationgtionController
中呈现出来的东西
因此,当您呈现一个viewcontroller
时,您将持有‘`viewcontroller’的一个实例,该实例将具有self.parentViewController。
https://stackoverflow.com/questions/30507339
复制