1

对不起,但没有一个类似的问题能提供有效的解决方案。

新的单视图项目。故事板动作:

  • VC1 嵌入在导航控制器中
  • VC1 中的按钮激活VC2中的推送序列
  • VC2 中的按钮将模态转换激活到 VC3
  • VC3 有一个按钮和一个UIViewController 子类来处理按钮动作

问题陈述:如何让模态 VC3 的按钮同时关闭VC3 和 VC2,将我带回 VC1?

这不起作用 - 只带我到 VC2:

- (IBAction)dismissPressed:(id)sender {
    UINavigationController *myNavController = [self navigationController];
    [self dismissViewControllerAnimated:NO completion:^{
        [myNavController popToViewController:[myNavController.viewControllers objectAtIndex:1] animated:NO];
    }];
}

非常感谢!

4

3 回答 3

0

好的,这里是解决方案:

如果您可以将自己限制为 ios6+,那么正确的答案是使按钮成为展开转场,如展开转场的用途是什么以及如何使用它们?

但是如果你和我一样,必须遵守 ios5,解决方案是这样的:

在调用模态 segue的 VC 中声明一个委托,如下所示:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"segueModalVC"]) {
        ModalVC *vc = [segue destinationViewController];
        vc.prevVC = self;
    }
}

您必须#import 目标模态VC 的标头。

现在在模态 VC 本身中添加一个属性来保存以前的 VC,如下所示:

@property (weak, nonatomic) UIViewController *prevVC;

现在弹出两个 VC 的按钮操作应该如下所示:

- (IBAction)pressedMainMenu:(id)sender {
    [self dismissViewControllerAnimated:YES completion:nil];
    [[self.prevVC navigationController] popViewControllerAnimated:NO];
}

[编辑显示完美运行的最终版本,可以将动画从 VC3 翻转回 VC1。我花了几个小时才完成这个,但现在你可以免费享受它了:)]

恕我直言,模态 VC 没有“本机”方法来访问其先前的 VC,这是一个设计错误。

于 2013-10-21T21:04:35.547 回答
0

使用self.presentingViewController找出“前一个视图控制器”。您不需要通过属性传递上一个视图控制器。

- (IBAction)dismissPressed:(id)sender {
    UIViewController *presentingViewController = self.presentingViewController;
    [self dismissViewControllerAnimated:NO completion:^{
        [self.presentingViewController popViewControllerAnimated:TES];
    }];
}
于 2013-10-21T07:58:40.807 回答
0

尝试使用popToRootViewControllerAnimated方法返回 VC1。

- (IBAction)dismissPressed:(id)sender {
    UINavigationController *myNavController = [self navigationController];
    [self dismissViewControllerAnimated:NO completion:^{
        [myNavController popToRootViewControllerAnimated: NO];
    }];
}
于 2018-01-10T11:08:38.397 回答