Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/kubernetes/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 在选项卡栏中的同一选项卡上切换视图,而不使用导航控制器_Objective C_Ios_Cocoa Touch_Ios4_Uiview - Fatal编程技术网

Objective c 在选项卡栏中的同一选项卡上切换视图,而不使用导航控制器

Objective c 在选项卡栏中的同一选项卡上切换视图,而不使用导航控制器,objective-c,ios,cocoa-touch,ios4,uiview,Objective C,Ios,Cocoa Touch,Ios4,Uiview,我正在寻找一种方法,将选项卡容器中的当前视图切换到另一个,所有视图都在同一个选项卡中,并且不使用导航控制器 我试过这样的方法: FooViewController *fooViewController = [[FooViewController alloc] initWithNibName:@"FooViewController" bundle:nil]; self.view.window.rootViewController.view.window.rootViewController = f

我正在寻找一种方法,将选项卡容器中的当前视图切换到另一个,所有视图都在同一个选项卡中,并且不使用导航控制器

我试过这样的方法:

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];
无济于事


有什么想法吗?

我使用的方法是创建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];

在第二个示例中,
self
是根视图控制器还是其他一些视图控制器?当我运行第二个示例时,它看起来像是活动选项卡的实际视图容器,
.view
最终是活动视图。我认为是这样的,因为代码实际上从容器中删除了视图,并使选项卡栏处于固定状态,但它不会用新视图替换视图。它不会替换视图,因为
[self.view addSubview:…]
将其添加为刚从屏幕中删除的视图的子视图。您必须交换一些常用superview的子视图。但是,我不确定(根据您的代码)正确的方法是什么。是的,我不确定第二种方法是否正确,因此我同意从superview中删除该视图并尝试在其位置添加一些内容是违反直觉的。不,我认为这正是您应该做的,但这不是您正在做的。在您发布的代码中,您正在从屏幕上删除视图,然后将新视图放在其中,这是没有意义的。