【问题标题】:UITabBarController IssueUITabBarController 问题
【发布时间】:2012-11-08 09:40:37
【问题描述】:

我想创建如下所示的内容。 RootView没有TabBar,从第二个视图看应该有TabBar。

我目前所做的是,我使用UINavigationController 作为控制器类

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
   
    
    UIViewController *rootController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];
    
    navigationController = [[UINavigationController alloc] initWithRootViewController:rootController];
        
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    [self.window addSubview:navigationController.view];
    [self.window makeKeyAndVisible];
    return YES;
}

但是我如何在 SecondViewController 中将UITabBar 与 tabBarController 一起使用?

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    创建第二个视图的对象,然后使用 tabbarcontroller 推送您的视图

    【讨论】:

      【解决方案2】:

      从 Storyboard 中将您的 SecondViewController 嵌入 TabBar。选择您的控制器并转到编辑器 -> 嵌入 -> TabBar 控制器!我来自我的手机。如果我有任何拼写错误,请见谅!

      【讨论】:

        【解决方案3】:

        您需要推送您的 Tabbar 控制器的对象。初始化标签栏控制器的对象并将所有其他控制器对象添加到标签栏控制器的视图控制器数组中。

        按钮操作:-

        1> 初始化标签栏控制器,假设你将它的对象命名为objTab;

        2> objTab.viewcontrollers = [NSArray arrayWithObjects:..] ---> 作为标签栏控制器一部分的所有视图控制器的对象。因此需要先创建所有对象。

        3> self.navigationcontroller pushViewController: objTAb

        【讨论】:

          【解决方案4】:

          这样的事情应该可以解决问题(不使用 ARC):

          //vc1, vc2, vc3 = your view controllers
          NSArray *viewControllersArray = [NSArray arrayWithObjects:vc1,vc2,vc3, nil];    
          UITabBarController *tabBarController = [[UITabBarController alloc] init];
          [tabBarController setViewControllers:viewControllersArray];
          [self.navigationController pushViewController:tabBarController animated:YES];
          [tabBarController release];
          

          您要做的是创建 UITabBarController 并将其推送到导航堆栈。

          【讨论】:

            【解决方案5】:

            对于示例在 appdelegate 中编写 loadnewview 方法。使用 buttonPressed 方法进行按钮操作或第一个视图控制器的任何对象操作,如下所示,以从第二个视图控制器显示选项卡栏。 我取了两个标签作为示例,所以我将容量写为 2。您最多可以取 5。

            -(IBAction)buttonPressed:(id)sender
            {    
                HomeViewController *homeVC=[[HomeViewController alloc]initWithNibName:@"HomeViewController" bundle:nil];
            
                [self.navigationController pushViewController:homeVC animated:YES];        
                [appDelegate loadnewview];
            }    
            
            -(void)loadnewview
            {    
                if(!self.tabBarController)
                    self.tabBarController = [[UITabBarController alloc] init];
            
                self.tabBarController.delegate=self;    
                NSMutableArray *localcontrollerarray = [[NSMutableArray alloc] initWithCapacity:2];        
                UIViewController *viewController1 = [[HomeViewController alloc] initWithNibName:@"HomeViewController" bundle:nil];        
                UINavigationController *navi1 = [[UINavigationController alloc] initWithRootViewController:viewController1];        
                [localcontrollerarray addObject:navi1];        
                UIViewController *viewController2 = [[ScanViewController alloc] initWithNibName:@"ScanViewController" bundle:nil];    
                UINavigationController *navi2 = [[UINavigationController alloc] initWithRootViewController:viewController2];        
                [localcontrollerarray addObject:navi2];        
                self.tabBarController.viewControllers = localcontrollerarray;    
                [self.window addSubview:self.tabBarController.view];    
            }
            

            【讨论】:

              【解决方案6】:

              AppDelegate.m 和property-synthesize UITabBarController 中使用这种类型的方法,并将视图控制器数组存储在其中也在应用程序didFinishLaunchingWithOptions 方法中,只需将navigationViewController 分配为RootViewController,如下所示..

              RootViewController *masterViewController = [[[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil] autorelease];
                  self.navigationController = [[[UINavigationController alloc] initWithRootViewController:masterViewController] autorelease];
              

              之后,当您想将 TabBar 添加到当时的任何视图时,请像这样调用此波纹管方法..

              [appDelegate addTabBarControllerInwindow];
              
              -(void)addTabBarControllerInwindow 
              {
                  [UIView beginAnimations:nil context:NULL];
                  [UIView setAnimationDuration:1.0];
                  [UIView setAnimationTransition:UIViewAnimationTransitionFlipFromLeft forView:self.window cache:YES];
                  
                  [self.navigationController.view removeFromSuperview];
                  [self.window addSubview:[tabBarController view]];//tabBarController.view
                  [UIView commitAnimations];
              }
              

              【讨论】:

                【解决方案7】:

                使用标签栏控制器和要隐藏标签栏使用代码的视图控制器的 ViewDidLoad 方法创建一个应用程序:

                        [self.tabBarController.tabBar setHidden:YES];
                

                并且不要忘记使用相同的代码来取消隐藏标签栏,用 NO 代替 YES 来显示你想要显示标签栏的视图控制器。

                【讨论】:

                • -1。不必要地将根视图控制器更改为 UITabBarController。
                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2023-03-22
                • 1970-01-01
                相关资源
                最近更新 更多