2012-05-04 123 views
0

我是Iphone的新手,我已經啓動了一個應用程序,在該應用程序中我添加了一個自定義選項卡欄,該欄只能加載到某個特定頁面。標籤欄按照我的預期工作。現在的問題是,當我瀏覽到標籤欄不斷顯示其他頁面,它會導致嚴重的問題,對我來說... 這是我實現iOS5自定義選項卡欄

在.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 

在。米,我實施該選項卡爲:

- (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]; 
} 
+0

對不起,格式不正確... –

回答

1

每蘋果的規則,一個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在屏幕的頂部,並給你一個後退按鈕。只要你將UIToolbarUITabBar作爲PageViewController的一部分,它就會在它的視圖控制器出現和消失時進行推送和彈出。那有意義嗎?

+0

我正在嘗試的是...我有一個UIViewController與一些菜單圖標。當我點擊任何多圖標時,它會帶我到一個包含三個選項卡的頁面,頂部有一個「主頁」按鈕可以返回到主菜單(標籤欄頁面來自哪裏)。我已經實現了使用上述代碼的所有內容,但是當我點擊「Home」按鈕時,它會將我帶到主菜單頁面,但標籤欄位於底部。我不知道我的代碼是否正確/可行。請幫助我。 –

+0

正如我剛纔提到的,這聽起來像你可能更喜歡使用'UIToolbar',但無論如何,它聽起來像你**不**具有使用'UINavigationController'的設置。你應該看看基於導航的應用程序,因爲我認爲他們會自動管理你正在掙扎的一些功能。 – mbm29414

+0

感謝您的幫助..我也會嘗試... –

相關問題