[英]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
,並為您提供一個后退按鈕。 只要使UIToolbar
或UITabBar
成為PageViewController
一部分,則在按下和彈出它時,它應隨其視圖控制器一起出現和消失。 那有意義嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.