【问题标题】:Circular navigation issue循环导航问题
【发布时间】:2013-10-19 11:07:05
【问题描述】:

我有一个视图控制器 (A),其中包含 2 个按钮,可将视图推送到其他 2 个视图控制器(B 和 C)。视图控制器 B 可以将视图推送到视图控制器 C,视图控制器 C 也可以将视图推送到视图控制器 B。我有一个循环导航。所有视图控制器都有自己的导航控制器。我使用 ARC。 我该如何处理?谢谢。

【问题讨论】:

  • 我相信这更多的是用户体验问题而不是技术问题,特别是如果这些控制器中的每一个都有单独的导航控制器。如果您使用统一导航控制器来管理此堆栈,您可以想象在其viewControllers 属性“在用户背后”执行一些操作以更改堆栈,以便您可以更明确地了解从堆栈中弹出的视图。

标签: ios objective-c uinavigationcontroller navigation


【解决方案1】:

您应该只使用一个UINavigationController。使用该控制器,您将 A 控制器设置为其根控制器。从该视图控制器中,您可以通过调用 [self.navigationController pushViewController:yourDesiredViewController animated:YES]; 来推送具有相同导航控制器的“B”或 C 控制器。但是当你是那个yourDesiredViewController 并且你从这里推送另一个viewController 时,你可能来自同一个viewController 并且在你的navigationController 堆栈中会有相同的viewControllers。因此,为了避免这种情况,您可以在 secondViewController (B) 或 (C) 上执行此操作

//If the user has chosen to add new user then the viewcontroller will be popped....
for (UIViewController *aVC in self.navigationController.viewControllers)
{
    if ([aVC isKindOfClass:[DesiredViewController class]])
    {
        [self.navigationController popToViewController:aVC animated:YES];
        return;
    }
}
[self.navigationController pushViewController:yourDesiredViewController animated:YES];

如果yourDesiredViewController 已经存在,这会将您弹出到yourDesiredViewController,否则它将推送yourDesiredViewController,因为它不在您的堆栈中。在您的 BC 控制器上执行此操作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-14
    • 2021-12-24
    相关资源
    最近更新 更多