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。

[plain]view plaincopy

 

1.     -(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的第二个面板。

 

[plain]view plaincopy

 

1.     // 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;  

}  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ViewController中添加子ViewController可以使用以下步骤: 1.创建子ViewController 首先,需要创建一个子ViewController,可以使用以下代码: ``` let childViewController = ChildViewController() ``` 其中ChildViewController是你要添加的子ViewController类。 2.将子ViewController添加为子视图控制器 在将子ViewController添加到父ViewController之前,需要将其添加为父ViewController的子视图控制器。可以使用以下代码将子ViewController添加到父视图控制器中: ``` addChild(childViewController) ``` 注意,这里的addChild方法不仅将子ViewController添加为子视图控制器,还会将子ViewController的视图添加为父ViewController的视图层次结构中。 3.将子ViewController的视图添加到父ViewController中 现在,可以将子ViewController的视图添加到父ViewController中,可以使用以下代码: ``` view.addSubview(childViewController.view) ``` 这里,我们将子ViewController的视图添加到父ViewController的view中。 4.完成添加 最后,需要调用以下代码来完成添加: ``` childViewController.didMove(toParent: self) ``` 这里,我们调用了childViewController的didMove(toParent:)方法,通知子ViewController已经添加到了父ViewController中。 完整的代码如下所示: ``` let childViewController = ChildViewController() addChild(childViewController) view.addSubview(childViewController.view) childViewController.didMove(toParent: self) ``` 需要注意的是,在移除子ViewController时,需要按照相反的顺序执行上述步骤,并在最后调用以下方法来从父视图控制器中删除子视图控制器: ``` childViewController.removeFromParent() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值