SplitViewController UI 布局
Posted
技术标签:
【中文标题】SplitViewController UI 布局【英文标题】:SplitViewController UI layout 【发布时间】:2011-01-20 17:49:09 【问题描述】:我正在尝试创建一个 UI,其中我有一个包含 TabBarController 的详细信息区域的 SplitView。 TabBarController 将为在 SplitView 的 RootViewController 中选择的项目显示 3 种不同类型的详细信息。
到目前为止,我已经通过执行以下操作使 TabBar 显示了 SPlitView;
1) 创建了一个新的基于 SplitView 的应用程序。 2) 创建了一个基于 TabBar 的新应用 3) 将 FirstView 和 SecondView 控制器的 .xib、.h 和 .m 文件从 TabBar 应用程序复制到 SplitView 应用程序中。 4) 在我的应用程序委托头文件中添加以下内容;
@class RootViewController;
@class DetailViewController;
@class FirstViewController;
@class SecondViewController;
@interface SplitViewTemplateAppDelegate : NSObject <UIApplicationDelegate>
UIWindow *window;
UISplitViewController *splitViewController;
UITabBarController *tabBarController;
RootViewController *rootViewController;
DetailViewController *detailViewController;
FirstViewController *firstViewController;
SecondViewController *secondViewController;
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;
@property (nonatomic, retain) IBOutlet RootViewController *rootViewController;
@property (nonatomic, retain) IBOutlet DetailViewController *detailViewController;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@property (nonatomic, retain) IBOutlet FirstViewController *firstViewController;
@property (nonatomic, retain) IBOutlet SecondViewController *secondViewController;
5) 在 IB 中打开 MainWindow.xib 并将 DetailsView 上的类更改为 UITabController 6) 将以下代码添加到我的应用程序委托模块文件中;
#import "FirstViewController.h"
@synthesize window, splitViewController, rootViewController, detailViewController, tabBarController, firstViewController, secondViewController;
-(void) makeTabBarController
NSMutableArray *controllers = [NSMutableArray arrayWithArray:splitViewController.viewControllers];
int index = 0;
for (UIViewController *controller in splitViewController.viewControllers)
if (index == 1)
//NSLog(@"Index is: %@", index);
//NSLog(@"Controller name is: %@", controller.title);
UINavigationController *localNavController;
tabBarController = [[UITabBarController alloc] init];
NSMutableArray *localViewControllersArray = [[NSMutableArray alloc] initWithCapacity:2];
firstViewController = [[FirstViewController alloc] initWithNibName:@"FirstView" bundle:nil];
localNavController = [[UINavigationController alloc] initWithRootViewController:firstViewController];
localNavController.tabBarItem.title = @"First Tab";
[firstViewController release];
[localViewControllersArray addObject:localNavController];
[localNavController release]; // Retained by above array
secondViewController = [[SecondViewController alloc] initWithNibName:@"SecondView" bundle:nil];
localNavController = [[UINavigationController alloc] initWithRootViewController:secondViewController];
localNavController.tabBarItem.title = @"Second Tab";
[secondViewController release];
[localViewControllersArray addObject:localNavController];
[localNavController release]; // Retained by above array
tabBarController.viewControllers = localViewControllersArray;
[localViewControllersArray release]; // Retained thru above setter
//tabBarController.delegate = splitViewController;
[controllers replaceObjectAtIndex:index withObject:tabBarController];
index++;
splitViewController.viewControllers = controllers;
7) 在 didFinishLaunchingWithOptions 方法中添加以下内容;
[self makeTabBarController];
所以现在我得到了一个开箱即用的 SplitView,右侧有一个标签栏控制器,里面有两个标签。选项卡用于在视图之间切换。
我现在正在努力解决的几件事是;
-
缺少触发 Popover 的按钮,是否需要将其添加到每个选项卡视图中?
如何将 RootViewController 与 TabBarController 挂钩,以便显示所选项目的详细信息?
【问题讨论】:
不知道我的代码发生了什么,但我可以正确格式化它! hm,似乎列表标记和代码标记存在问题。我改变了它,使代码看起来很好 谢谢,你有机会回答我的问题吗? ;) 我的 iPad 技能非常有限。 :S 我添加了 [cocoa-touch] 标签以引起更多关注。但是你应该想出一个更好的标题。 【参考方案1】:不确定您是否仍在为此寻找答案。关于多个详细视图的问题,我遇到了一个非常相似的问题。最后,我从苹果开发者网站上找到并使用了这个解决方案:
SubstitutableDetailViewController
他们的解决方案实施起来非常简单易懂。
关于问题的第二部分,您可以让 TabBarController 委托通知拆分视图左侧的视图当前详细视图是谁。然后它可以使用该信息为正确的视图提供更新。
【讨论】:
以上是关于SplitViewController UI 布局的主要内容,如果未能解决你的问题,请参考以下文章
splitViewController 的 barButtonItem 未显示在屏幕上?
SplitViewController 在启动时总是显示 DetailViewController
UINavigationController & SplitViewController