0

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

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

如何也关闭父视图。任何想法

4

1 回答 1

0

你的代码看起来有点混乱。引用 parentViewController 的目的是什么?检查文档 - 它是包含viewController,而不是先前或正在呈现的viewController。在 NavigationController 上下文中,这将是 UINavigationController。在模态视图上下文中没有 parentViewController,但有一个呈现ViewController。我不确定您对 self.parentViewController 的所有调用的意图。

在任何情况下,您都应该通过委托将关闭请求发送回呈现的 viewController,以便完全清楚 pushViewController 消息从哪里传递到哪里。

在您的 signUpViewController 的头文件中声明一个协议:

@protocol SignUpViewControllerDelegate
- (void) dissmissSignUpVC;
@end

然后在你的presentingViewController中,之后

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

也许无论如何你应该重新考虑你的逻辑。我想如果你对视图控制器进行这种底层操作,用户可能会有一个令人困惑的体验。最好有一个 UI 控件供用户导航到 toolsViewController 以便他们了解自己在哪里?

于 2012-12-19T11:58:12.010 回答