从appDelegate添加UITabBarController NOT?

时间:2011-07-20 12:56:35

标签: iphone objective-c xcode uinavigationcontroller uitabbarcontroller

仅仅是我或者字面上所有我在网上看到的uitabbarcontroller的例子都需要修改appDelegate吗?如果标签栏稍后出现在应用程序中并且之前还有其他屏幕怎么办?有人可以解释这个或指向一个示例,其中应用程序的第一个屏幕不是标签栏视图?我对此感到疯狂,如果不是来自AppDelegate,似乎无法使tabbar工作。

感谢!!!

更新:

所以我在我的一个视图控制器中执行此操作,在一个方法中触发一旦您单击按钮移动到下一个屏幕(这是标签栏视图)。它在执行期间崩溃:

  self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
UIViewController *viewController1 = [[FirstView alloc] initWithNibName:@"FirstView" bundle:nil];
UIViewController *viewController2 = [[SecondView alloc] initWithNibName:@"SecondView" bundle:nil];
self.tabBarController = [[UITabBarController alloc] init];
self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; //CRASHES HERE
self.window.rootViewController = self.tabBarController;
[self.window makeKeyAndVisible];

知道为什么吗?谢谢!

它崩溃了这一行:

self.tabBarController.viewControllers = [NSArray arrayWithObjects:viewController1, viewController2, nil]; //CRASHES HERE

3 个答案:

答案 0 :(得分:2)

您可以从任何视图控制器将 UITabBarController 推送到导航控制器。这样做可能会折叠导航栏,因为 UITabBarController 中的视图控制器本身可能包含 UINavigationController

为了克服此导航栏问题,您需要从推动标签栏控制器的视图控制器中隐藏当前导航控制器的导航栏。隐藏当前视图控制器的 viewWillDisappear:方法中的导航栏。

- (void)viewWillDisappear:(BOOL)animated {

    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

答案 1 :(得分:1)

好的,我们走了。假设mainWindow.xib有一个UINavigationController和一个TabBarController。稍后在某些时候使用导航控制器对前几个屏幕进行设置当你需要tabBarController你需要做的只是从mainWindow中删除navigationController的视图并将tabBarController的视图作为子视图添加到窗口。如果不让我知道,我希望你明白。

答案 2 :(得分:1)

  

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

http://developer.apple.com/library/ios/#DOCUMENTATION/UIKit/Reference/UITabBarController_Class/Reference/Reference.html

相关问题