Objective c TabBarController和SplitViewController

Objective c TabBarController和SplitViewController,objective-c,ios,ipad,uitabbarcontroller,uisplitviewcontroller,Objective C,Ios,Ipad,Uitabbarcontroller,Uisplitviewcontroller,我希望我的splitviewController显示在TabBarController中。不幸的是,我首先决定使用一个SplitViewController,然后选择了苹果的模板。现在我处于一个不方便的位置,不知道如何将它添加到选项卡栏 我尝试了一些在StackOverflow上解释的东西,但最好的结果是一个黑屏,下面有一个选项卡栏:-( 我只是在努力寻找一个简单的好方法 myAppdelegate的代码: - (BOOL)application:(UIApplication *)applica

我希望我的
splitviewController
显示在
TabBarController
中。不幸的是,我首先决定使用一个
SplitViewController
,然后选择了苹果的模板。现在我处于一个不方便的位置,不知道如何将它添加到选项卡栏

我尝试了一些在StackOverflow上解释的东西,但最好的结果是一个黑屏,下面有一个选项卡栏:-(

我只是在努力寻找一个简单的好方法

myAppdelegate的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
// Override point for customization after application launch.
// Add the split view controller's view to the window and display.
self.window.rootViewController = self.splitViewController;
[self.window makeKeyAndVisible];

NSArray *searchPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
documentFolderPath = [searchPaths objectAtIndex: 0];
self.rootViewController.directoryPath = documentFolderPath; 

NSURL *docUrl = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey];
if ([docUrl isFileURL]) {
    NSString *path = [docUrl path];
    self.detailViewController.currentFilePath = path;
    [self.detailViewController setDetails:path newFile:FALSE];
}
return YES;
编辑:

我刚刚意识到你实际上想要在标签栏里有一个splitview。根据苹果的文档,这是一个禁忌

拆分视图控制器必须始终是您创建的任何接口的根 换句话说,您必须始终从安装视图 aUISplitViewController对象作为应用程序的 窗口。拆分视图界面的窗格可能会包含 导航控制器、选项卡栏控制器或任何其他类型的视图 您需要实现接口的控制器


如果您仍然想使用选项卡栏,我在下面写的东西仍然适用,但是您的子视图不应该是splitview控制器

原始答案:

您需要在代码中创建tabbar控制器,然后将splitview控制器添加为选项卡之一。在您的情况下,self.splitViewController将成为tabbar控制器中的视图控制器之一。我还没有尝试使用apple模板应用程序作为起点,但它应该可以工作

有关更多信息,您可以在uitabbarcontroller上查找教程。这一教程看起来很有前途:

这也很方便:

这是一个样本:

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        // Override point for customization after application launch.
        UITabBarController *tabBarController = [[UITabBarController alloc] init];
        //set tbconroller as root view controller of window
        [self.window setRootViewController:tabBarController];
        //window retains controller so we can release
        [tabBarController release];

        //create two view controllers
        UIViewController *vc1 = [[HypnosisViewController alloc] init];
        UIViewController *vc2 = [[CurrentTimeViewController alloc] init];
        //make an array containing these two view controllers
        NSArray *viewControllers = [NSArray arrayWithObjects:vc1,vc2,nil];

        [tabBarController setViewControllers:viewControllers];

        //the views are retained their new owners, so we can release
        [vc1 release];
        [vc2 release];          

        [[self window] makeKeyAndVisible];
        return YES;
    }

如果您使用的是interface builder,这里还有一些教程或苹果文档中的

,这是一个不允许的情况

但是有一种方法可以很容易地实现这一点(我们是为一个应用程序而做的)

看看

我认为这是这个问题的恰当答案。

你应该检查你需要的一切

添加一些控制器和设计,您可以这样结束:


PS:我实际上在应用商店中有一个应用程序使用了这个控制器,所以赶快去吧!

我刚刚解决了这个问题,因为过去几天它一直在我的head后台运行。 在“UITabbarView”中,您可以有任意多个“拆分视图”,反之亦然,而无需使用任何代码,但如果您想让Apple满意,并使拆分视图控制器成为根控制器,则必须键入一行代码

牛肉在这里

  • 创建一个单一视图项目,或任何您喜欢的项目
  • 在主情节提要中,拖放拆分视图控制器
  • 从“单视图控制器”中拖动初始化箭头,然后 将其指定给您的“分割视图控制器”
  • 现在,如果运行项目,它应该加载拆分视图
  • 创建“UISplitViewController”的新coca touch文件子类,调用 你喜欢什么都行
  • 在“viewDidLoad”中添加以下行“self.preferredDisplayMode”= .PrimaryHidden”//仅用于隐藏主视图
  • 回到主情节提要,选择分割视图控制器,然后 使其成为您刚刚创建的视图控制器
  • 现在,删除细节视图控制器的“视图”(仅限于 (视图)
  • 在对象库中找到“容器视图”,将其拖放 它位于详细信息视图控制器中
  • 这将生成连接到“容器”的视图控制器 视图“将生成的视图控制器嵌入到”选项卡栏控制器“中 现在,已将拆分视图连接到选项卡栏控制器
  • TabBarController应具有一个视图控制器(项目1), 将此控制器的“视图”(仅视图)替换为 “集装箱视图”
  • 现在从“对象”菜单拖放新的拆分视图控制器 “库”将“项目1”中的“容器视图”连接到新添加的 “分割视图控制器”
  • 现在,如果您还记得,我们应该挂起一个视图控制器 当我们创建单视图项目时,在周围的某个地方发现 控制器将其连接到选项卡栏控制器,现在 有两个项目
  • 重复相同的过程,将视图替换为“容器视图”,然后 添加新的拆分视图控制器并将其连接到此故事板
  • 现在,这个最终的故事板应该是这样的。同样,你们不必从Split view controller开始,但我这样做只是为了符合苹果的推荐


    那么你想让你的UITabBarController的其中一个选项卡显示一个UISplitViewController,其中有两个视图?看看我的答案,你也可以使用界面生成器。太棒了!非常感谢!我还可以在
    splitviewcontroller的
    纵向模式下使用左视图的popover iSNTED吗?当然可以。但是,我们应该小一些我有一个主意,我会试着回来找你。我设法在potrait模式下隐藏根视图,但导航控制器的“后退”按钮占据了左上角&因此它似乎有点复杂。Elvis的答案也很恰当。但Intelligent SplitViewController似乎也没有用于左视图拆分的popoverTabBarController中的ViewController不再是“不”了。请查看iPad上的苹果播客应用程序。谢谢,伙计!你使用了Hillegass的示例代码,对吧;)我想知道是否有一种完全用IB实现的方法,有故事板之类的东西?好眼力!:)我很喜欢这本书,还有一些来自它的示例代码。我不认为IB有什么办法,因为苹果不希望我们这么做。TabBarController中的SplitViewController不再是“不”了。查看iPad上的苹果播客应用程序。