Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/93.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 将TabBarController推送到视图中_Objective C_Ios_View_Tabbarcontroller - Fatal编程技术网

Objective c 将TabBarController推送到视图中

Objective c 将TabBarController推送到视图中,objective-c,ios,view,tabbarcontroller,Objective C,Ios,View,Tabbarcontroller,如何将TabBarController推送到视图 该应用程序基于视图。在应用程序中,我有一个带有TabBar控制器的XIB,我想将TabBar推到显示屏上。我做了所有的事情,现在我不知道我做错了什么 以下是应推动TabBarController的代码: - (void)showTabBar { TabBar *tbc = [[TabBar alloc] initWithNibName:@"TabBar" bundle:nil]; [self presentModalViewController:

如何将TabBarController推送到视图

该应用程序基于视图。在应用程序中,我有一个带有TabBar控制器的XIB,我想将TabBar推到显示屏上。我做了所有的事情,现在我不知道我做错了什么

以下是应推动TabBarController的代码:

- (void)showTabBar {
TabBar *tbc = [[TabBar alloc] initWithNibName:@"TabBar" bundle:nil];
[self presentModalViewController:tbc animated:YES];
[tbc release];
}
此时,XIB中有一个空视图。因此,当我运行此代码时,显示为白色。还有TabBarController,我想在显示屏上看到它

谢谢你的帮助


更新:

我应该说这是两个不同的类。函数“showtabar”所基于的类应该推动tabbar控制器。第二个类是TabBar。TabBar是TabBar控制器的委托

因此,我对答案进行了如下修改,但我尝试了两种方法:

[self presentModalViewController:tbc.tabBarController.view animated:YES];
错误现在如下所示:

Incompatible Objective-C types 'struct UIView *', expected 'struct UIViewController *' when passing argument 1 of 'presentModalViewController:animated:' from distinct Objective-C type

更新:

嘿,错误已经消失了。很酷

但应用程序正在终止。我以前见过这种行为,但我不知道该怎么办。 调试器控制台会这样说:

2011-01-27 15:49:32.629 Touch[3657:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Application tried to present a nil modal view controller on target <StartUp: 0x9300f20>.'
2011-01-27 15:49:32.629 Touch[3657:207]***由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因是:“应用程序试图在目标上呈现零模式视图控制器。”
由于UITabBarController类继承自UIViewController类,因此选项卡栏控制器有自己的视图,可以通过view属性访问部署选项卡栏界面时,必须将此视图安装为窗口的根目录。与其他视图控制器不同,选项卡栏界面不应作为其他视图控制器的子级安装。

这意味着,这是不“允许的”,苹果可以或可能在将来拒绝您的应用程序。UITabBarController旨在添加到应用程序委托中的根视图(窗口)。如果您希望以后打开选项卡栏,则需要将UIToolBar与uisegmentedcontrol或工具栏按钮一起使用


即使某些应用程序会这样做(例如Wordpress应用程序),但稍后您会发现,在以模式显示ViewController时,控制台中会出现一些问题。(将给出警告)。

好的,这是否意味着我必须在没有TabBarController的情况下自行构建TabBar?据我所知,是的。我在一个应用程序中犯了同样的“错误”,因为编译器不会告诉你推一个UITabBarController是错误的,所以在我得到帮助并阅读文档之前,我认为这是可以的(这会导致其他问题,因为iOS为你设置了与parentViewController、tabBarController、navigationController的隐式关系)。我做的是制作一个UIToolBar,并添加了一个我居中的UISegmentedControl。然而,我也可以使用Utoolbaritem,它会给你几乎相同的效果。但是,推/弹出视图的逻辑已丢失。您会使用普通视图填充构建选项卡栏所需的所有选项卡栏内容吗?是的,您会创建一个新的viewcontroller,继承UIViewController并将组件添加到此视图。所有类型的控制器都是这样吗?可能是使用NavigationController或ViewController?如果我想使用它们,我必须从头开始构建它们吗?