2012-05-04 71 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

感谢您的帮助..我也会尝试... –

相关问题