在2个ViewControllers之间导航

时间:2012-07-02 08:42:29

标签: iphone ios xcode

我正在Navigation Controller使用ViewControllers,我将importantViewController设置为RootView

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

然后,我推动另一个查看FrontViewController,如下所示:

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

FrontViewController按下按钮后,另一个视图将被推送ViewA,但它与另一个ViewController ViewB的关联方式与此相同:

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

(我认为在使用[self.navigationController popViewControllerAnimated:YES];

解雇其中任何一个时我做错了。)

这是一个例子:

enter image description here

我的问题是,我需要在View A和View B之间导航,然后当我解除其中任何一个时,它将返回FrontViewController。就像一个孩子的孩子一样。感谢。

4 个答案:

答案 0 :(得分:2)

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

从View 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上编写此代码。

希望现在有效: - )

答案 1 :(得分:2)

@Prasad G指出了一种方式。但是这个解决方案的问题是你需要frontViewController的相同对象。您无法通过创建新对象来执行此操作。为了这样,在appdelgate中声明frontViewController对象,并在从重要的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个View Controller的对象。

此代码可能有拼写问题,因为我在这里输入了

希望这会有所帮助:)

<强>更新

- &gt;您有impVC作为根视图 - &GT;你推了frontVC - &GT;从那里你推了VC_A - &GT;从那里你想推VC_B

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

[self.navigationController popViewControllerAnimated];

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

如果您正在寻找其他任何内容,请说明。如果您仍然面临问题请解释。

答案 2 :(得分:0)

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

尝试这样我觉得它会对你有所帮助。

答案 3 :(得分: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]

在viewB到FrontViewController上

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

返回viewB到viewA

[self.navigationController popViewControllerAnimated:YES];