iPad页面管理——Split ViewController

Split View Controller

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

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


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


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

通过Interfacebuilder创建splitview controller

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

为应用程序主nib文件添加splitview controller

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

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

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

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

[window addSubview:mySplitViewController.view];

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

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

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

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

编程方式创建splitview controller

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

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

splitview中支持设备转动

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

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


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

// Called when rotating to a portrait orientation. 
- (void)splitViewController: (UISplitViewController*)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem*)barButtonItem forPopoverController: (UIPopoverController*)pc {
    barButtonItem.title = @"Root List"; 
    NSMutableArray *items = [[toolbar items] mutableCopy]; 
    [items insertObject:barButtonItem atIndex:0]; 
    [toolbar setItems:items animated:YES]; 
    [items release]; 
    self.popoverController = pc;
}

// Called when the view is shown again in the split view, invalidating the button and popover controller.
- (void)splitViewController: (UISplitViewController*)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
    NSMutableArray *items = [[toolbar items] mutableCopy]; 
    [items removeObjectAtIndex:0]; 
    [toolbar setItems:items animated:YES]; 
    [items release];
    self.popoverController = nil;
}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值