繁体   English   中英

iOS5自定义标签栏

[英]iOS5 Custom Tab Bar

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

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

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

有点像这样:

--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 ,并为您提供一个后退按钮。 只要使UIToolbarUITabBar成为PageViewController一部分,则在按下和弹出它时,它应随其视图控制器一起出现和消失。 那有意义吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM