当前位置:  开发笔记 > IOS > 正文

TabBar中的UISplitViewController(UITabBarController)?

如何解决《TabBar中的UISplitViewController(UITabBarController)?》经验,为你挑选了3个好方法。

我处于一种情况,我需要从基于选项卡的应用程序开始,并且我需要一个或多个选项卡的拆分视图.但似乎拆分视图控制器对象无法添加到tabbarController中.(虽然tabbar对象可以添加到splitviewcontroller).

问题还可以看出:我在左侧部分有一个完整的屏幕我有一个表视图,当在表中选择任何行时,弹出框应该指向该行.现在,当弹出窗口中的任何行被选中时,此弹出窗口中的行将位于所选行的左下方(仅此行可见),而另一个弹出窗口将从所选行中出现.(面包屑导航类型)

我想我清楚地解释了什么.那么有任何想法或解决方法吗?

如果我不清楚我的问题,请告诉我.

谢谢,

Madhup



1> g_fred..:

使用界面构建器,创建拆分视图控制器和标签栏控制器,并将它们链接到您的插座:

@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;

在您的应用程序委托中didFinishLaunchingWithOption,将拆分视图控制器分配给选项卡栏控制器:

splitViewController.tabBarItem = [[[UITabBarItem alloc] initWithTitle:@"Title" image:nil tag:0] autorelease];
NSArray *controllers = [NSArray arrayWithObjects:splitViewController,  /* other controllers go here */ nil];
tabBarController.viewControllers = controllers;
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];

这将创建一个标签栏控制器(在这种情况下只有一个标签),可以在所有方向上正确显示.


这样做真的好吗?我可以看到,例如Yelp iPad应用程序在根目录中放置了一个标签栏,其中有多个拆分VC,但官方视图控制器编程指南中有这一段:"拆分视图控制器必须始终是任何界面的根你创建.换句话说,你必须始终从UISplitViewController对象安装视图作为应用程序窗口的根视图.分割视图界面的窗格可能包含导航控制器,标签栏控制器或任何其他类型的视图控制器你需要实现你的界面."

2> Greg Combs..:

我已经为UISplitViewController写了一个子类,它将监听设备方向的变化并相应地定位自己.通过这个类,我现在可以在UITabBarController中放置拆分视图,并且每个拆分视图在旋转时都会正常运行,即使它不是最前面的选项卡.我已经成功地在TexLege中部署了它并且它被批准在App Store中使用,但您的里程可能会有所不同.请参阅Github的存储库.

随意分叉和修改它,我总是有兴趣听取有关它的评论(或投诉). https://github.com/grgcombs/IntelligentSplitViewController



3> Madhup Singh..:

我做了一个示例应用程序.并发现我们可以通过编程方式执行以下操作:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

        NSMutableArray *array = [NSMutableArray array];

        NSMutableArray *tabArray = [NSMutableArray array]; 

        UISplitViewController *splitViewConntroller = [[UISplitViewController alloc] init];

        MainViewController *viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];




        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        array = [NSMutableArray array];

        splitViewConntroller = [[UISplitViewController alloc] init];

        viewCont = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        viewCont = [[DetailViewController alloc] initWithNibName:@"DetailViewController" bundle:nil];
        [array addObject:viewCont];
        [viewCont release];

        [splitViewConntroller setViewControllers:array];

        [tabArray addObject:splitViewConntroller];

        [splitViewConntroller release];

        // Add the tab bar controller's current view as a subview of the window
        [tabBarController setViewControllers:tabArray];

        [window addSubview:tabBarController.view];
        [window makeKeyAndVisible];

        return YES;
    }

希望这可以帮助.


如果您尝试在iOS 4.2或4.3中执行此操作并在iOS3.2中完全是灾难性的,那将非常抱歉.它可以正常工作,但在横向模式下更改方向或启动应用程序时无法正确调整大小.
推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有