选项卡控制器未正确显示

3

我正在尝试将标签栏控制器连接到我的应用程序的现有部分,但是当我这样做时,它会“故障”。

然而,当我将标签栏控制器部分作为初始视图控制器单独运行时,它可以像下面的图片一样正常工作:

enter image description here

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

enter image description here

然而,当我从我的主应用程序转到此标签栏控制器时,它看起来像这样:

enter image description here

我的主应用程序长这样:

滚动视图包含

  • UIView 1
  • UIView 2
  • UIView 3
  • UIView x

每个视图都不与此标签栏控制器相关。只有一个视图x尝试“访问”标签栏控制器并在那里显示一些数据,但没有成功。有什么想法吗?

我将此标签栏控制器标识符设置为“test”,并且这是我从视图x中执行的方法:

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

编辑:

整个应用程序:

enter image description here

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

解决方案:

更改:

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

收件人:

UITabBarController *newViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"test"];
        [self addChildViewController:newViewController];
        [self.view addSubview:newViewController.view];
2个回答

2
您需要为导航控制器设置根视图控制器。

2
我想让我的众多视图中的一个指向导航控制器,但我仍然希望从我的应用程序(当前启动的根视图控制器)开始。也许我误解了你的回答,你能给出更详细的回答吗?谢谢。 - London
尝试将选项卡视图控制器中的函数“Addsubview”更改为“Addchildviewcontroller”。 - Janub

1

不要这样做。来自苹果UITabBarController参考文献

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

据我理解,这意味着您必须仅将UITabBarController用作窗口的根视图控制器。但是,您始终可以使用一般的UIViewController并在其中添加UITabBar。

(您遇到的视图偏移问题可能可以修复,但这不遵循Apple的指南,不建议这样做)。


1
这是一个很好的观点,你会如何推荐我去做呢?我希望将这个选项卡控制器用于我的应用程序中的选项,并且需要将它们排列在一些选项卡中,以便用户不会被过多的信息淹没。你会如何实现这个功能呢?对于你的答案给予+1评价。 - London
我建议在设置视图中使用UISegmentedControl,它应该符合苹果的指南,并且完美匹配用户体验(例如,在设置应用程序中查看Wi-Fi网络详细信息视图)。如果您真的想在导航层次结构的中间使用TabBar,并且它必须与TabBar相关联而不是其他任何内容,请准备好应用程序被拒绝的可能性(我并不是说一定会被拒绝,但有可能)。如果您需要任何关于UISegmentedControl或UITabBar的教程,而不是UITabBarController,您可以尝试在Google上搜索详细信息,有很多教程可供您参考。 - A-Live

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接