如何在Tab Bar控制器中嵌入Split View控制器?

时间:2014-05-11 16:45:00

标签: ios xcode ipad uitabbarcontroller uisplitviewcontroller

我开始使用Master-Detail应用程序,然后转到 iPhone storyboard,选择NavigationController并转到编辑器> 嵌入> TabBarController它运作得很好。当我尝试在 iPad中执行相同操作 storyboard时,嵌入TabBarController菜单项已被禁用。我应该手动完成吗?

4 个答案:

答案 0 :(得分:6)

  1. 通过xcode创建样本Master / Detail
  2. 在故事板上拖动tabViewController
  3. 将TabViewController更改为初始视图控制器。
  4. 控制从TabViewController拖动到SplitViewControler
  5. 在故事板中为SplitViewControler分配标题(我使用“Master”
  6. 在app delegate中,替换对splitViewController的引用,如下所示。

    let tabBarViewController = self.window!.rootViewController as! UITabBarController
    print(tabBarViewController.viewControllers?.count)
    var splitViewController:UISplitViewController? = nil
    for viewController in tabBarViewController.viewControllers! {
        if viewController.title == "Master" {
            splitViewController = viewController as? UISplitViewController
        }
    }
    
    let navigationController = splitViewController!.viewControllers[splitViewController!.viewControllers.count-1] as! UINavigationController
    navigationController.topViewController!.navigationItem.leftBarButtonItem = splitViewController!.displayModeButtonItem()
    splitViewController!.delegate = self
    

答案 1 :(得分:1)

拆分视图控制器无法嵌入到任何内容中 - 它必须是故事板中的根视图控制器。

但是,您可以选择主视图控制器或详细视图控制器,并将这些类嵌入到其他视图控制器中。

答案 2 :(得分:1)

在我的应用程序中,我以编程方式嵌入,如下所示

        UISplitViewController *split=[[UISplitViewController alloc]init];
        PatientListController *patListContr=[[PatientListController alloc]init];
        PatientController *patientControl=[[PatientController alloc]init];
        split.viewControllers=@[patListContr,patientControl];
        split.tabBarItem=[[UITabBarItem alloc]initWithTitle:@"" image:[UIImage imageNamed:@"patient.png"] selectedImage:nil]; 

然后将上面的拆分视图控制器嵌入到TabbarController

UITabBarController *tabbarContr=[[UITabBarController alloc]init];
        tabbarContr.viewControllers=@[split,yourController1,yourController2];

答案 3 :(得分:0)

基于Rob George's Swift answer,这是Objective-C代码:

UITabBarController *tabBarViewController= (UITabBarController *) self.window.rootViewController;
NSLog(@"%lu",tabBarViewController.viewControllers.count);
UISplitViewController *splitViewController = (UISplitViewController *)nil;

for(UIViewController *viewController in tabBarViewController.viewControllers){
    if([viewController.title isEqualToString:@"Master"]){
        splitViewController= (UISplitViewController *) viewController;
    }
}

UINavigationController *navigationController = splitViewController.viewControllers[splitViewController.viewControllers.count-1];
navigationController.topViewController.navigationItem.leftBarButtonItem = splitViewController.displayModeButtonItem;
splitViewController.delegate = self;

我花了一段时间,因为"第一" ViewController是白色的,带有条形图(没有图标和白色文字)几乎完全是白色的,我认为应用程序只是默认显示什么,但实际上它是选择空的ViewController而我根本没看到酒吧。万一你想知道它为什么不起作用lol