0

我是 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];
}
4

1 回答 1

1

根据 Apple 的规则,TabBarController应该是主容器。另外,如果您只是实现一个 custom UITabBar,您是否使用它来将用户推送到其他视图?如果是这样,如果UITabBar消失了,用户如何返回?

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

有点像这样:

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

编辑/更新

我刚刚看到你的代码,我不确定我是否理解你想要实现的目标。我认为您可能正在尝试以某种方式实现类似于 a 的行为UINavigationController而无需实际使用。


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

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

如果您使用上面的层次结构,UINavigationController则会自动为您提供NavigationBar屏幕顶部的 ,并为您提供一个后退按钮。只要您制作UIToolbarUITabBar的一部分PageViewController,它应该在您推动和弹出它时与它的视图控制器一起出现和消失。那有意义吗?

于 2012-05-04T12:02:06.900 回答