NavigationControllers和UITabBar

时间:2012-02-26 12:17:39

标签: iphone objective-c ios

我的应用程序是这样的:应用程序委托中的navigationBar具有类似rootController的Controller1(UIViewController),在controller1中我推控制器2(UIViewController),控制器2有3个UINavigationController,以及自定义tabBar,每个navigationController有一个根控制器,最后我把所有的navigationController放在CustomTabBar中。

我的问题是:这样干净(好)吗?如果没有我可以如何组织我的项目?

MyAppDelegate.h 
@property (strong, nonatomic) UIWindow *window;
@property (strong, nonatomic) UINavigationController *navigationController;
@property (strong, nonatomic) CustomTabBar *tabBarController;

MyAppDelegate.m {
UIViewController *controller1 = [[UIViewController alloc] initWithNibName:nil bundle:nil];
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    navigationController = [[UINavigationController alloc] initWithRootViewController:controller1];
 self.window.rootViewController = navigationController;
}

controller1.h
    UIViewController controller2;
    UINavigationController *navigationController2;

    UIViewController controller3;
    UINavigationController *navigationController3;


    UIViewController controller3;
    UINavigationController *navigationController3;

controller1.m 
-(void)viewDidLoad{

viewController1 = [[UIViewController......
navigationController1 = [[UINavigationController alloc] initWithRootViewController:controller1];
....

AppDelegate *apDelegate= [UIApplication sharedApplication].delegate;

    apDelegate.tabBarController = [[CustomTabBar alloc] initWithNibName:nil bundle:nil];
   [apDelegate.tabBarController setViewControllers: [NSArray arrayWithObjects:navigationController1,navigationController2,navigationController3,nil]];
}

3 个答案:

答案 0 :(得分:1)

这是摘自苹果documentation

的摘录
  

部署标签栏界面时,必须将此视图安装为窗口的根目录。与其他视图控制器不同,标签栏界面不应该作为另一个视图控制器的子项安装。

从我的角度来看,从一开始就解决如何使用UITabBarController类有点棘手,所以在这种情况下更好的方法是看一些好的手册。对我来说this one总是在我开始讨论这个用户界面时总是有帮助:)

祝你好运。

修改
为了使您的标签栏仅显示在某些具体视图中,您必须从应用程序的开头隐藏标签栏,并使其仅在您真正需要时显示。 为了隐藏它,您可以使用以下方法:

[theTabBar setHidden:YES];

答案 1 :(得分:0)

将tabBarController设置为window对象的rootViewController:

self.window.rootViewController = tabBarController;

或者您可以将tabBarController.view设置为window对象的子视图:

[self.window addSubView:tabBarController.view];

答案 2 :(得分:0)

如果你想将tabBarController添加到secondo视图:

[secondViewController.view addSubView:tabBarController.view];

或者,对于navigationController

[navigationController1.view addSubView:tabBarController.view];
or
navigationController1.rootViewController = tabBarController;

换句话说,在controller1.m中你声明一个TabBarController并添加navController1,navController2等。

然后将tabBarController作为rootViewController或subView添加到controller1。

我希望这就是你所期待的!