关闭modalvew控制器和父视图

时间:2012-12-19 10:31:05

标签: objective-c xcode

我正试图从像这样的视图中打开模态视图,

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];
}

如何解除父视图。任何想法

1 个答案:

答案 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,以便他们了解它们的位置?