2

我使用Navigation Controller我的ViewControllers,我将我的设置importantViewController为这样的RootView

UINavigationController *navControl = [[UINavigationController alloc] initWithRootViewController: vc];
[self presentModalViewController: navControl animated: YES];

然后,我 pushView anotherView 是FrontViewController这样的:

    [self.navigationController pushViewController:vc animated:YES];

FrontViewController另一个视图中按下按钮后,将按下另一个视图ViewA,但它与另一个 ViewController 连接ViewB方式与此相同:

    [self.navigationController pushViewController:vc animated:YES];

(我认为我在解雇他们中的任何一个时做错了[self.navigationController popViewControllerAnimated:YES];

这是一个插图:

在此处输入图像描述

我的问题是,我需要在视图 A 和视图 B 之间导航,然后当我关闭它们中的任何一个时,它会返回到FrontViewController. 就像一个孩子视图的孩子。谢谢。

4

4 回答 4

2

我认为这是针对dismissModalViewController,但试试这个,

从视图 B 编写这样的代码

[[self parentViewController].navigationController popViewControllerAnimated:YES];

从视图 A 你可以写,

[self.navigationController popViewControllerAnimated:YES];

或者你可以使用这个,

[self.navigationController popToViewController:frontViewController animated:YES];

更新

for (UIViewController *tmpController  in [self.navigationController viewControllers]) 
{
    if ([tmpController isKindOfClass:[FrontViewController class]])
    {
        [self.navigationController popToViewController:tmpController animated:YES];
        break;
    }
}

这是实现这一目标的最佳解决方案。

在您的视图 A 或 B 上都写下此代码。

希望它现在可以工作:-)

于 2012-07-02T08:53:01.633 回答
2

@Prasad G 指出了一种方法。但是这个解决方案的问题是你需要相同的对象frontViewController。您不能通过创建新对象来做到这一点。为了以这种方式frontViewController在 appdelgate 中声明对象并从重要的VC使用中推送它

appdelgate.frontViewController = // initialize
// Push it

从视图 B 返回时

[self.navigationController popToViewController:appdelegate.frontViewController animated:YES];

另一种解决方案是

for (UIViewController *vc  in [self.navigationController viewControllers]) {
    if ([vc isKindOfClass:[FrontViewController class]]) {
        [self.navigationController popToViewController:vc animated:YES];
        break;
    }
}

使用这种方式,您可以从任何级别的导航堆栈访问任何视图控制器。

如果您有 10 个视图控制器并且想要继续使用任何一个,则使用第一个解决方案,因此您必须首先在 appdelegate 中创建所有 10 个视图控制器的对象。

这段代码可能有拼写问题,因为我只是在这里输入的

希望这可以帮助 :)

更新

-> 你有 impVC 作为你的根视图 -> 你推了 frontVC -> 从那里你推了 VC_A -> 从那里你想推 VC_B

所以你完成了推送,回到 VC_A 你可以使用

[self.navigationController popViewControllerAnimated];

现在您可以再次打开 VC_B 并再次弹出它。要从 VC_A 转到 frontVC,您可以使用popViewControllerAnimated;要从 VC_B 转到 frontVC,您可以使用我提到的 for 循环。

如果您正在寻找其他东西,请解释一下。如果您仍然面临问题,请解释。

于 2012-07-02T08:57:21.410 回答
0

在 FrontViewController 按下按钮后:

  ViewA instance
  [self.navigationController pushViewController:ViewA animated:YES]

当 ViewA 被驳回时

  [self.navigationController popViewControllerAnimated:YES];

在 ViewA 中加载 ViewB

  ViewB instance
  [self.navigationController pushViewController:ViewB animated:YES]

在后视图 B 到 FrontViewController

 FrontViewController instance
[self.navigationController popToViewController:FrontViewController animated:YES];

在后视图 B 到视图 A

[self.navigationController popViewControllerAnimated:YES];
于 2012-07-02T08:56:04.640 回答
0
[self.navigationController popToViewController:frontViewController animated:YES];

试试这样我认为它会对你有所帮助。

于 2012-07-02T08:51:54.247 回答