3

我正在使用 UINavigationController 制作一个具有以下视图层次结构的小应用程序:

登录 -> 选项 -> 三种不同的视图

问题是我想以下列方式在最后 3 个视图之间导航:

1<->2
1<->3
2<->3

即能够从任何其他视图切换到任何视图,这提醒了 UITabViewController 功能。因此,它不是分层的,它是任意图。要在视图之间切换,我将使用导航栏中的按钮。

对我来说最简单的方法是继承 UINavigationController,添加与我的视图相对应的属性并实现在这些视图之间切换的方法(使用 pushViewController 和 popToRootViewController)。这些方法将从视图中调用以进行切换(导航)。

但是参考资料说 UINavigationController 不适合子类化。 http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

你建议我做什么?

4

2 回答 2

0

我将保留UINavigationController但不使用通常pushViewController:的 switch 视图,如下所示:

NSMutableArray *viewControllers = [self.navigationController.viewControllers mutableCopy];
    // from here you can modify the order of controllers as much as you want
[viewControllers addObject:nextViewController];
[viewControllers removeObject:self];

[self.navigationController setViewControllers:viewControllers animated:YES];

如果您不希望动画效果如何,您可以设置animated:NO并将其包含setViewControllers:在一个[UIView animate...]块中,或者将您自己的自定义添加CAAnimation到导航控制器的图层中。

于 2012-10-17T08:46:38.763 回答
0

使用以下代码将视图控制器添加到导航控制器,

从第一个 -> 第二个导航

SecondViewController *secondView = [[SecondViewController alloc] initWithNibName:@"SecondViewController" bundle:nil];
    NSMutableArray *navigationarray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
    [navigationarray removeAllObjects];
    [navigationarray addObject:secondView];
    self.navigationController.viewControllers = navigationarray;

从第一个 -> 第三个导航

ThirdViewController *thirdView = [[ThirdViewController alloc] initWithNibName:@"ThirdViewController" bundle:nil];
    NSMutableArray *navigationarray = [[NSMutableArray alloc] initWithArray:self.navigationController.viewControllers];
    [navigationarray removeAllObjects];
    [navigationarray addObject:thirdView];
    self.navigationController.viewControllers = navigationarray;

上面的代码将从 Navigation Array 中删除所有 viewControllers 并放置一个新的 View Controller

如果你想去一个特定的视图控制器,然后使用下面的代码......

[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] 动画:YES]

将索引更改为堆栈中的视图控制器。

于 2012-10-17T10:20:26.277 回答