我正试图从像这样的视图中打开模态视图,
SignupViewController *signUpView = [[SignupViewController alloc] initWithNibName:@"SignupViewController" bundle:nil];
[signUpView setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
self.parentViewController.view.transform = CGAffineTransformMakeScale(1.3, 1.3);
self.parentViewController.view.alpha = 0;
[UIView animateWithDuration:.35 animations:^{self.parentViewController.view.alpha = 1.0; self.parentViewController.view.transform = CGAffineTransformMakeScale(1, 1);}];
[self presentModalViewController:signUpView animated:YES];
登录后我关闭了模态视图并重定向到另一个视图,但是父视图仍在那里,
[self dismissViewControllerAnimated:YES completion:^{
ToolsViewController *gototoolpage = [[ToolsViewController alloc] initWithNibName:@"ToolsViewController" bundle:nil];
[self.navigationController pushViewController:gototoolpage animated:YES];
}
如何解除父视图。任何想法
答案 0 :(得分:0)
你的代码看起来有点困惑。你对parentViewController的引用是什么意思?检查文档 - 它是包含 viewController,而不是之前的或呈现 viewController。在NavigationController上下文中,这将是UINavigationController。在模态视图上下文中没有parentViewController,但是有一个呈现 ViewController。我不确定所有这些对self.parentViewController的调用是什么意思。
在任何情况下,您都应该通过委托将解雇请求发送回呈现的viewController,以便完全清楚pushViewController消息的传递位置。
在signUpViewController的头文件中声明一个协议:
@protocol SignUpViewControllerDelegate
- (void) dissmissSignUpVC;
@end
然后在你的presentationViewController中,
之后SignupViewController *signUpView = [[SignupViewController alloc] initWithNibName:@"SignupViewController" bundle:nil];
添加
[signUpView setDelegate:self];
并使用您在完成块中具有的相同代码实现委托方法:
- (void) dissmissSignUpVC {
ToolsViewController *gototoolpage = [[ToolsViewController alloc]
initWithNibName:@"ToolsViewController" bundle:nil];
[self.navigationController pushViewController:gototoolpage animated:YES];
}
在signUpView中调用委托的方法来解雇:
[[self delegate] dissmissSignUpVC];
请注意那些堆叠的动画,我怀疑只会执行第一次动画(即gototollpage animated:YES
也可能是gototoolpage animated:NO
)
也许无论如何你应该重新考虑你的逻辑。我想如果你对viewControllers进行引擎盖操作,用户可能会遇到令人困惑的经历。更好的是,用户可以使用UI控件导航到toolsViewController,以便他们了解它们的位置?