TabBarController和SplitViewController

时间:2011-10-31 10:06:05

标签: objective-c ios ipad uitabbarcontroller uisplitviewcontroller

我希望我的splitviewController显示在TabBarController内。不幸的是,我首先决定只有SplitViewController并选择了苹果的模板。现在我处于不方便的位置,不知道如何将其添加到标签栏。

我尝试了几个在StackOverflow上解释过的东西,但最好的结果是黑屏,下面有一个标签栏: - (

我正在努力寻找一种美好而简单的方法。

Appdelegate的代码:

- (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;

4 个答案:

答案 0 :(得分:6)

您应该检查IntelligentSplitViewController是否是您需要的一切!

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

Screenshot of an iPad app using IntelligentSplitViewController

PS :我实际上在App Store中有一个使用此控制器的应用程序,所以请继续前进!

答案 1 :(得分:5)

编辑:

我刚刚意识到你实际上想要在tabbar中使用splitview。根据苹果文档,这是一个不。 http://developer.apple.com/library/ios/#featuredarticles/ViewControllerPGforiPhoneOS/iPadControllers/iPadControllers.html

  

拆分视图控制器必须始终是您所有接口的根   创建。换句话说,您必须始终安装视图   aUISplitViewController对象作为应用程序的根视图   窗口。然后可以包含拆分视图界面的窗格   导航控制器,标签栏控制器或任何其他类型的视图   控制器,你需要实现你的界面。


如果您仍想使用tabbar,我在下面写的内容仍然适用,但您的子视图不应该是splitview控制器。

原始回答:

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

您可以在uitabbarcontroller上查找有关详细信息的教程。这看起来很有希望:http://www.xcode-tutorials.com/uitabbarcontroller-and-uinavigationcontroller/

这也很方便:http://developer.apple.com/library/ios/#documentation/UIKit/Reference/UITabBarController_Class/Reference/Reference.html

下载样本:

   - (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;
    }

如果您正在使用界面构建器,则可以参考以下几个教程http://www.cimgf.com/2009/06/25/uitabbarcontroller-with-uinavigationcontroller-using-interface-builder/http://www.mobisoftinfotech.com/blog/iphone/iphone-tabbar-uitabbarcontroller-tutorial/

答案 2 :(得分:3)

我刚刚解决了这个问题,因为它在过去的几天里一直在我的头脑中运行。 您可以拥有尽可能多的"拆分视图"如你所愿,在" UITabbarView"或者反之亦然,不使用任何代码,但如果你想满足Apple并使Split视图控制器是根控制器,你必须输入一行代码。

所以牛肉就在这里。

  1. 创建一个单一视图项目,或者您喜欢的任何内容。
  2. 在主故事板中拖放拆分视图控制器。
  3. 从"单视图控制器中拖动初始化箭头"和 将它指定给你的"拆分视图控制器"。
  4. 现在,如果您运行项目,则应加载拆分视图。
  5. 创建新的coca touch文件子类" UISplitViewController",调用 无论你喜欢什么。
  6. 在" viewDidLoad"添加以下行" self.preferredDisplayMode = .PrimaryHidden" //只是为了隐藏主视图
  7. 返回主故事板,选择拆分视图控制器和     使它的视图控制器成为你刚创建的控制器。
  8. 现在,删除"查看"细节视图控制器(只是 视图)
  9. 找到"容器视图"在对象库中,拖放它 它在详细信息视图控制器中。
  10. 这将生成连接到" Container的视图控制器  查看"将生成的视图控制器嵌入"标签栏控制器"  现在,您将Split View连接到Tab Bar控制器。
  11. 你的TabBarController应该有一个视图控制器(第1项),      替换"视图" (仅查看​​)此控制器的      " ContainerView"
  12. 现在从"对象中拖放新的拆分视图控制器  文库"连接" ContainerView"在"项目1"添加新的  "拆分视图控制器"。
  13. 现在,如果你还记得我们应该挂一个视图控制器  在某处,当我们创建单个视图项目时,找到它  控制器将它连接到标签栏控制器,所以现在你  有2件。
  14. 重复相同的过程,用"容器视图替换视图"和      添加新的拆分视图控制器并将其连接到此故事板。
  15. 现在,这个最终的故事板看起来应该是这样的。你不必从Split视图控制器开始,但我这样做只是为了匹配Apple推荐。

    enter image description here

    enter image description here

答案 3 :(得分:2)

从Apple的文档中可以看出这是不可取的。

但有一种方法可以轻松实现这一目标(我们为应用程序做到了这一点)。

查看http://www.codeworth.com/blog/mobile/ios-splitviewcontroller-inside-tabviewcontroller/

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