[英]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.