在标签栏中的相同选项卡上切换视图而不使用导航控制器

时间:2011-08-23 17:06:16

标签: objective-c ios cocoa-touch ios4 uiview

我正在寻找一种方法将标签容器中的当前视图切换到另一个标签容器,所有这些都在同一个标​​签页中, 不使用 导航控制器。

我尝试过这样的事情:

FooViewController *fooViewController = [[FooViewController alloc] initWithNibName:@"FooViewController" bundle:nil];
self.view.window.rootViewController.view.window.rootViewController = fooViewController;
[fooViewController release];

而且:

FooViewController *fooViewController = [[FooViewController alloc] initWithNibName:@"FooViewController" bundle:nil];
[self.view removeFromSuperview];
[self.view addSubview:fooViewController.view];
[fooViewController release];

无济于事。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

我使用的方法是创建一个UIViewController的子类,我用它作为3个子视图控制器的根视图。根控制器的值得注意的属性是:

  • viewControllers - 我在
  • 之间切换的视图控制器的NSArray
  • selectedIndex - 在viewLoad上设置为0的所选视图控制器的索引。这是非原子的,所以当调用setSelectedIndex时,它会完成放置子视图控制器的所有逻辑。
  • selectedViewController - 一个只读属性,以便其他类可以确定当前显示的内容

在setSelectedIndex方法中,您需要使用类似于以下的逻辑:

[self addChildViewController: selectedViewController];
[[self view] addSubview: [selectedViewController view]];
[[self view] setNeedsDisplay];

这非常有效,但因为我想在整个应用程序中使用单个导航控制器,所以我决定采用不同的方法。

我忘了提到你每次添加一个时都要清除子视图控制器,这样你就不会堆积大量的视图控制器而浪费内存。在上面的阻止之前:

for (UIViewController *viewController in [self childViewControllers])
    [viewController removeFromParentViewController];