簡體   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