我在Xcode 5中的接口构建器中添加了一个UINavigationController,并将其标识符命名为“importer”,然后在Home控制器中,我将它用作模态窗口,从这些代码 -
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"main" bundle:nil];
UINavigationController *importer = [storyboard instantiateViewControllerWithIdentifier:@"importer"];
[self presentViewController:importer animated:YES completion:nil];
效果很好,导入器控制器在其UITableView中显示正确的数据。 然后,当我关闭导入器控制器时,我在导入器控制器中使用此代码 -
[self dismissViewControllerAnimated:YES completion:^{
HomeController *p = (HomeController *)self.presentedViewController;
NSLog(@"home controller = %@", p);
[p onCompleteImport];
}];
HomeController是提供导入器控制器的人,我想从完成块获取HomeController,但它给了我“null”,那么如何从导入器控制器获取HomeController?感谢。
我已经尝试过tellViewController,parentViewController,presentsViewController,甚至self.navigationController.presentingViewController,self.navigationController.presentedViewController和self.navigationController.parentViewController,都失败了。
答案 0 :(得分:0)
这很奇怪,但我发现它有什么问题。
HomeController是MainController的子控制器,导入器控制器的presentViewController是“MainController”,不是我想象的,有点奇怪,虽然HomeController提供了导入器控制器。
另一个问题是“无法在完整的块中加载presentationViewController,因为这次,presentViewController将为nil”
答案 1 :(得分:0)
试试这个:
HomeController *p = (HomeController *)self.presentingViewController;
[self dismissViewControllerAnimated:YES completion:^{
NSLog(@"home controller = %@", p);
[p onCompleteImport];
}];
在使用阻止之前保留它,因为动画完成时“导入器”已被解除。