`
R任轩
  • 浏览: 15867 次
  • 性别: 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;  
}  

 

分享到:
评论

相关推荐

    IOS应用源码——Split82-GGJ2012-676a4f7.rar

    《iOS应用源码解析——Split82-GGJ2012项目》 在iOS开发领域,源码分析是提升技能、理解应用架构和学习新技术的重要途径。Split82-GGJ2012-676a4f7这个项目,作为一款iOS应用的源码,为我们提供了一个宝贵的实践和...

    iOS之presentViewController模态全屏适配解决方案.docx

    这种方法可以免除遗漏某个页面,同时也能修改第三方代码中的模态显示。原理是,在运行时检查方法,然后做IMP交互,让方法重载,执行自定义代码。代码如下: ```objective-c #import NS_ASSUME_NONNULL_BEGIN @...

    viewController管理

    集中管理 VC 的 方法类 集中管理 VC 的 方法类集中管理 VC 的 方法类集中管理 VC 的 方法类集中管理 VC 的 方法类集中管理 VC 的 方法类集中管理 VC 的 方法类集中管理 VC 的 方法类

    IOS应用源码——ipad note记事本.zip

    【标题】"IOS应用源码——ipad note记事本.zip"揭示了这是一份针对iPad设备的iOS应用源代码,主要用于开发一个记事本应用。这个应用可能具备创建、编辑、保存和查看笔记的基本功能,是iOS开发者学习和研究移动应用...

    导航控制器presentViewController

    在导航控制器中使用`presentViewController`时,通常是为了展示非线性或者临时性的内容,例如设置界面、登录页面或者模态对话框。由于导航控制器本身已经有一个堆栈管理的视图控制器序列,`presentViewController`并...

    IOS强制子VIEWCONTROLLER为横屏

    6. **考虑设备旋转限制**:iOS 13及以上版本,你可能还需要在Info.plist中添加` UISupportedInterfaceOrientations~ipad `和` UISupportedInterfaceOrientations `键,分别指定iPad和iPhone的屏幕方向支持。...

    presentViewController:如何不覆盖原先的viewController界面

    在iOS 7和iOS 8中,开发者可能会遇到需要在不完全覆盖原先视图控制器的情况下呈现新界面的需求,这时可以利用一种特殊的方式——`Present Over Current Context`。 `Present Over Current Context` 是一种特殊的...

    ios实现viewcontroller切换传值的三种方法

    当用户在应用程序中进行导航,例如从一个页面跳转到另一个页面时,我们往往需要将一些信息从当前的ViewController传递给即将显示的ViewController。这里我们将详细探讨三种在iOS中实现ViewController切换并传值的...

    IOS应用源码——发布一个问题 就提供一个新demo,页面导航跳转的简单demotest.zip

    本示例“IOS应用源码——发布一个问题 就提供一个新demo,页面导航跳转的简单demotest.zip”显然是为了演示如何在iOS应用中实现这一功能。我们将深入探讨这个话题,并通过分析压缩包内的"test"文件,了解其背后的...

    IOS应用源码——一个适用于iPad的UI切换效果.rar

    标题所提到的"IOS应用源码——一个适用于iPad的UI切换效果.rar"正是针对这一需求,提供了一套适用于iPad应用的UI切换效果源代码。这个压缩包中的内容可能包括了实现这些效果的关键类、方法、资源文件以及相关的示例...

    ViewController.m

    ViewController.m

    ViewController 页面不同状态展示.zip

    ViewController 页面不同状态展示.zip,Protocol to handle initial Loadings, Empty Views and Error Handling in a ViewController & views

    两个viewcontroller的界面切换

    "两个viewcontroller的界面切换"这一主题涉及到如何在iPhone应用程序中平滑地从一个ViewController过渡到另一个,同时实现动画效果,以提供良好的用户体验。在这个过程中,我们可以使用多种方法来实现这种切换,包括...

    半透明ViewController

    在iOS开发中,半透明(或称为玻璃效果)的ViewController是一种常见的设计手法,它能够为用户界面增添一种轻盈、通透的视觉感受。这种效果通常通过调整ViewController的背景或者子视图的透明度来实现,同时还可以...

    ipad helloworld demo

    对于iPad应用,你可能还需要处理多任务特性,比如支持Split View或Slide Over,这时你需要理解`UISplitViewController`或`UISceneDelegate`的相关方法。 此外,iPad应用往往强调交互性,可以考虑添加手势识别...

    swift-实现类似于Facebook的滑动和滚动拉消失的Viewcontroller

    在Swift中,我们可以利用UIKit框架提供的手势识别、动画以及布局管理来实现这一功能。 首先,我们需要了解Swift中的手势识别。`UIPanGestureRecognizer`是关键,它可以捕捉到用户的滑动手势。我们将在...

    自定义presentViewController的转场动画(Swift)

    本篇文章将深入探讨如何在Swift中自定义`presentViewController`的转场动画,帮助开发者创建出独特且吸引人的界面过渡效果。 首先,我们需要了解`UIViewControllerTransitioningDelegate`协议。这个协议提供了...

    滑动切换ViewController

    2. 添加多个子ViewController到容器中,并管理它们的布局和显示。 3. 监听触摸事件,根据滑动方向切换显示的ViewController。 4. 实现滑动动画,使切换过程平滑自然。 例如,你可以使用`UIScrollView`或`...

    iOSm界面跳转和参数传递之presentViewController与dismissViewControllerAnimated

    在iOS开发中,界面间的...结合不同的参数传递方式,我们可以构建流畅的用户体验并有效地管理应用状态。在实际项目中,选择合适的数据传递方式取决于具体的需求和场景,需要综合考虑性能、代码结构和可维护性等因素。

    IOS应用源码——UINavigationControllerTest.rar

    在iOS开发中,UINavigationController是苹果提供的一种强大的界面管理组件,它主要用于管理多个UIViewController的堆栈,实现页面间的导航操作。这个"IOS应用源码——UINavigationControllerTest.rar"压缩包很可能是...

Global site tag (gtag.js) - Google Analytics