Objective c 选项卡栏控制器显示不正确

Objective c 选项卡栏控制器显示不正确,objective-c,ios,cocoa-touch,ios5,Objective C,Ios,Cocoa Touch,Ios5,我正在尝试将选项卡栏控制器连接到我的应用程序的现有部分,但当我这样做时,它“出现故障” 但是,当我作为初始视图控制器运行Tab Bar Controller part standalone时,它可以正常工作,如下图所示: 这是应用程序运行时的外观(正确行为): 但是,当我从主应用程序转到此选项卡栏控制器时,它是这样的: 我的主应用程序如下所示: 滚动视图包含 UIView 1 UIView 2 UIView 3 UIView x 每个视图都不包含与此选项卡栏控制器无关的内容。只有一个视

我正在尝试将选项卡栏控制器连接到我的应用程序的现有部分,但当我这样做时,它“出现故障”

但是,当我作为初始视图控制器运行Tab Bar Controller part standalone时,它可以正常工作,如下图所示:

这是应用程序运行时的外观(正确行为):

但是,当我从主应用程序转到此选项卡栏控制器时,它是这样的:

我的主应用程序如下所示:

滚动视图包含

  • UIView 1
  • UIView 2
  • UIView 3
  • UIView x
每个视图都不包含与此选项卡栏控制器无关的内容。只有一个视图x尝试“访问”选项卡栏控制器,并在那里显示一些数据,但事实并非如此。有什么想法吗

我将此选项卡栏控制器标识符设置为测试,下面是如何从视图x执行此操作:

UITabBarController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"test"];
        [self.view addSubview:newViewController.view];
编辑:

整个应用程序:

我正在以编程方式创建视图。这就是为什么我与选项卡栏控制器没有任何关系/分段

解决方案:

更改:

UITabBarController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"test"];
            [self.view addSubview:newViewController.view];
致:


您需要将根viewController设置为导航控制器

只需不要执行此操作。从苹果参考

由于UITabBarController类继承自UIViewController类,因此选项卡栏控制器有自己的视图,可以通过view属性访问。部署选项卡栏界面时,必须将此视图安装为窗口的根目录。与其他视图控制器不同,选项卡栏界面不应作为其他视图控制器的子级安装

据我所知,这意味着您必须仅将UITabBarController用作窗口的根视图控制器。但您可以始终使用通用UIViewController并在其中添加UIAbbar


(您遇到的视图偏移问题可能会得到解决,但它不会遵循苹果的指导原则,也不会被建议)。

我只想从我的多个视图中的一个指向导航控制器,我仍然想从我的应用程序开始(根视图控制器,当前从那里开始)。也许我没法解释你的答案,你能给我一个更详细的答案吗?谢谢你在TabbarViewControllert中将函数“Addsubview”改为“Addchildviewcontroller”。这是一个有效的观点,你会建议我怎么做。我希望这个选项卡栏控制器用于我的应用程序中的选项,我需要将它们安排在某种选项卡中,这样用户就不会被信息淹没。您将如何实现这一点,+1对于回答,我建议在设置视图中使用UISegmentedControl,它应该符合苹果的指导原则,并且应该完全符合用户体验(例如,请参见设置应用程序中的Wi-Fi网络详细信息视图)。如果您真的想在导航层次结构中使用一个Tabar,并且它必须与Tabar相关联,而没有其他东西,请准备好被拒绝的应用程序(我不是说它会,但它可能是)。如果您需要UISegmentedControl或UITabBar而不是UITabBarController的任何教程,您可以尝试在谷歌上搜索详细信息,有很多教程都可以为您提供。
UITabBarController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"test"];
        [self addChildViewController:newViewController];
        [self.view addSubview:newViewController.view];