iOS5自定义标签栏

时间:2012-05-04 11:49:37

标签: iphone ios mobile

我是Iphone的新手,我已经启动了一个应用程序,其中我添加了一个自定义标签栏,只需加载到某个特定页面。标签栏按照我的期望工作。现在的问题是,当我导航到其他页面时,标签栏会一直显示,这对我来说会造成严重的问题... 这是我的实现

在.h:

#import <UIKit/UIKit.h>
@class MainMenuViewController;

@interface RoutineListViewController : UIViewController<UITabBarDelegate>{
    MainMenuViewController *homeBtn;

    UITabBar *mainTabBar;
    UIViewController *routineTabViewController;
    UIViewController *calendarTaViewController;
    UIViewController *editTabViewController;
}

@property (nonatomic, retain) IBOutlet UITabBar *mainTabBar;
@property (nonatomic, retain) IBOutlet UIViewController *routineTabViewController;
@property (nonatomic, retain) IBOutlet UIViewController *calendarTabViewController;
@property (nonatomic, retain) IBOutlet UIViewController *editTabViewController;

- (IBAction)goToHome:(id)sender;

@end

在.m中,我将选项卡实现为:

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
    switch (item.tag) {
        case 1:
            if (routineTabViewController == nil) {
                self.routineTabViewController =[[RoutineListViewController alloc] initWithNibName:@"RoutineListViewController" bundle:nil];
                [self.view insertSubview:routineTabViewController.view belowSubview:mainTabBar];
                routineTabViewController = nil;
                [routineTabViewController release];
            }

            break;
        case 2:
            if (calendarTabViewController == nil) {
                self.calendarTabViewController =[[CalendarTabViewController alloc] initWithNibName:@"CalendarTabViewController" bundle:nil];
                [self.view insertSubview:calendarTabViewController.view belowSubview:mainTabBar];
                calendarTabViewController = nil;
                [calendarTabViewController release];
            }

            break;
        case 3:
            if (editTabViewController == nil) {
                self.editTabViewController =[[EditTabViewController alloc] initWithNibName:@"EditTabViewController" bundle:nil];
                [self.view insertSubview:editTabViewController.view belowSubview:mainTabBar];
                editTabViewController = nil;
                [editTabViewController release];
            }

            break;
        default:
            break;
    }
}

当我实现一个按钮转到其他页面时,标签栏会一直显示。这是EditTabViewController.m文件中的按钮实现。

- (IBAction)goToHome:(id)sender {
    homeBtn = [[MainMenuViewController alloc] initWithNibName:@"MainMenuViewController" bundle:nil];
    [self.view addSubview:homeBtn.view];
}

1 个答案:

答案 0 :(得分:1)

根据Apple的规则,TabBarController 假设是主要容器。另外,如果您只是实现自定义UITabBar,您是否正在使用它将用户推送到其他视图?如果是这样,如果UITabBar消失,用户将如何返回?

如果您只希望在特定页面可见时条形图可见,为什么不实现UINavigationController(作为主容器)并让根UIViewController实现执行UIToolbar相同的功能。然后,当您导航到另一个页面时(我假设您指的是新屏幕,而不是UIPageControl中的不同页面或UIWebView中的网页),一个不包含UIViewController的新UIToolbar

有点像这样:

--UINavigationController
   |
   -->UIViewController as RootViewController --> Contains UIToolbar
      |
      -->Pushes UIViewController --> Has no UIToolbar

修改/更新

我刚看到你的代码,而且我不确定我是否理解你想要实现的目标。我想你可能试图以某种方式实现类似于UINavigationController的行为而不实际使用一个。


编辑/更新#2 我认为你想要的行为可以这样实现:

UINavigationController (containing IconMenuViewController as RootViewController)
|
--> PageViewController (push into this from any icon touch in IconMenuViewController)
       --> Contains UIToolbar/UITabBar

如果您使用上面的层次结构,UINavigationController会自动为您提供屏幕顶部的NavigationBar并给您一个后退按钮。只要您创建UIToolbar的{​​{1}}或UITabBar部分,它就会随着您的视图控制器的显示和消失而弹出。这有意义吗?