`
R任轩
  • 浏览: 14891 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

iPad页面管理——Split ViewController

 
阅读更多

Split View Controller

类UISplitViewController是一种容器视图控制器用来管理两块信息。第一块面板的宽度固定为320points而高度则为窗口的可视高度。第二志面板则充满了剩余的可视空间。在landscape方向上,splitviewController显示为靠在一起的两块面板其中有一个分隔块。在portrait方向上,则只显示第二块面板并提供toolbar按钮用来使用popover来显示第一块面板。如下图所示:

 

 

Split视图的面板包括的内容是通过你所提供viewcontroller进行管理。因为面板包括了应用程序指定的内容,如何管理两个面板之间的交互是由开发者决定。但对于设备的旋转或其它系统相关的行为则是由splitcontroller控制。

Splitviewcontroller必须是你所创建所有界面的根。也就是说,你必须将UISplitViewController所包含的视图作为应用程序窗口的根视图。然后splitview controller的面板可能包括navigationcontroller,Tabbar controller或其它类型的viewcontroller。

 

最容易将splitview controller集成进应用程序的方法是新建一个工程。XCode中的SplitView-based application模板是创建splitview controller的最好开始。所有要创建splitview controller所需的条件都已俱备。你所要做的就是修改viewcontroller数组来显示你自己要展示的内容。对这些数组的修改对于iphone应用来说虚拟的。所不同的只是你必须有更多的屏幕区域来显示更多的内容。尽管如此,你也可以为你有的应用集成splitview controller。

 

通过Interfacebuilder创建splitview controller

 

如果你不想从SplitView-basedapplication模板中新建一个split工程,你仍然可以为你的用户界面增加splitview controller。Interfacebuilder库中包含了splitview controller可以添加到已有的nib中。当添加一个splitview controller,你通常是将其添加到应用程序的主nib文件中。这是因为splitview controller通常是作为你应用程序窗口的最上层的view并可以在启动阶段进行加载。

为应用程序主nib文件添加splitviewcontroller:

1.打开应用程序的主nib文件

2.拖动一个splitview controller到nib文件窗口中。(splitviewcontroller对象包含了两个面板所对应的viewcontroller)

3.在应用程序代理中增加一个splitview controller的outlet并与nib文件中控件进行连接

4.在应用程序代理类的application:didFinishLaunchingWithOptions:方法中将splitview controller的包含的视图作为窗口的主视图

[windowaddSubview:mySplitViewController.view];

5.对于splitview controller面板所包含的viewcontroller:

 

使用Identityinspector设置viewcontroller所对应的类名

在attributeinspector中,设置viewcontroller中视图所对应的nib文件

设置包括在splitview controller中两个面板中的viewcontroller是开发者的责任。你可以像在应用程序中配置其它viewcontroller一样配置它们。设置viewcontroller对应的类名,以及viewcontroller对应视图的nib文件。剩下的工作就是根据不同的viewcontroller进行相应的配置。

 

编程方式创建splitview controller

 

要以编程方式创建splitviewcontroller,先创建UISplitViewController类的一个实例并为其两个面板设置对应的viewcontroller。因为splitview controller的内容只由对应的viewcontroller提供,所以你不需要在创建splitviewcontroller时为其指定nib文件。因此你可以使用init方法对其进行初始化。下面的代码示例了如何在应用程序启动时创建并配置一个splitviewcontroller。你可以用自己定义的viewcontroller来代替缺省的在你应用程序中显示的第一和第二个viewcontroller。

  -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
2.         MyFirstViewController* firstVC = [[[MyFirstViewController alloc] initWithNibName:@"FirstNib" bundle:nil] autorelease];  
3.             MySecondViewController* secondVC = [[[MySecondViewController alloc] initWithNibName:@"SecondNib" bundle:nil] autorelease];  
4.           
5.             UISplitViewController* splitVC = [[UISplitViewController alloc] init];   
6.             splitVC.viewControllers = [NSArray arrayWithObjects:firstVC, secondVC, nil];  
7.           
8.          [window addSubview:splitVC.view];   
9.         [window makeKeyAndVisible];  
10.             
11.       return YES;  
12.   }  

 在splitview中支持设备转动

splitview controller信赖于其两个面板中的viewcontroller来决定是否支持设备的转动。如果一个或两个面板中的viewcontroller不支持设备所转动到的新方向,则显示不会有任何改变。这条原则在portrait方向,当第一个viewcontroller隐藏时仍然适用。所以你必须为两个面板中的viewcontroller都重载shouldAutorotateToInterfaceOrientation:方法并返回YES来支持所有方向的转动。

 

当设备方向发生改变时,splitviewcontroller自动处理大部分转动行为。特别要指出,splitviewcontroller会自动隐藏第一个面板当设备方向转动为portrait时并在设备转动到landscape方向时自动显示第一个面板。

 

如果你想在portrait方向时显示第一个面板,你就要使用到代理对象。当设置转动到portrait方向时,splitviewcontroller提供其代理一个按钮,点击该按钮,将在popover中显示第一个面板。你应用程序所要完成的是在splitViewController:willHideViewController:withBarButtonItem:forPopoverController:代理方法中将该按钮添加到应用的toolbar上并在splitViewController:willShowViewController:invalidatingBarButtonItem:代理方法中移除该按钮。下面的代码由SplitView-basedapplication模板提供。这些方法在detailview controller中定义,用来管理SplitView controller的第二个面板。

 

 // Called when rotating to a portrait orientation.   
2.     - (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc {  
3.         barButtonItem.title = @"Root List";   
4.         NSMutableArray *items = [[toolbar items] mutableCopy];   
5.         [items insertObject:barButtonItem atIndex:0];   
6.         [toolbar setItems:items animated:YES];   
7.         [items release];   
8.         self.popoverController = pc;  
9.     }  
 
 
 
[plain]view plaincopy
 
1.     // Called when the view is shown again in the split view, invalidating the button and popover controller.  
2.     - (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {  
3.         NSMutableArray *items = [[toolbar items] mutableCopy];   
4.         [items removeObjectAtIndex:0];   
5.         [toolbar setItems:items animated:YES];   
6.         [items release];  
7.         self.popoverController = nil;  
}  

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics