iPad页面管理——Popovers

Popovers

尽管它不是一个实际的viewcontrollerUIPopoverController类用来管理viewcontroller的显示。你可以使用popovercontroller对象来展示内容,使用popover,你可以让一个可见的层浮在应用程序的主窗口之上。Popovers提供了一个轻量级的方法用来显示或收集用户信息,通常在以下情况时使用:

  • 显示屏幕上一个对象的信息

  • 用来管理经常访问的工具或配置项

  • 用来显示一组要在你某个视图中对象上执行的命令

  • 当设备在portrait方向时,用来显示原来landscape方向时split视图中显示的内容

使用Popover来处理命令通常比用Modelview更为常见。在iPad应用程序中,modelview用来需要用户显式的接受或拒绝某些动作或信息时。例如:你可以使用modelview要求用户输入密码,验证完成后才能进行下面的操作。在其它情况下,通常可以使用Popover来代替。Popovers的优点在于它显示的时候不会覆盖整个屏幕并且只要在popover视图之外点击下就能使其消失。这可为用户提供不需要交互但提供信息或一些额外的功能。

注:你应该先关闭一个popover然后再显示一个model视图。


下图显示了当设备在portrait方向时,用来显示原来landscape方向时split视图中显示的内容。选择一个play可以在主视图中显示与该play相关的内容。


创建并显示Popovers

Popover所显示的内容是从你所指定的viewcontroller中继承。Popovers可以展示各种类型的viewcontroller,包括:自定义的viewcontrollertableview controller, navigation controller, tab barcontrollers。当你准备在popover中显示viewcontroller时,按下面的操作:

创建一个UIPopoverController的实例并使用你要展示的viewcontroller对其进行初始化

指定popover的大小,你可以通过两种方式指定:

为你要显示在popover中的viewcontrollercontentSizeForViewInPopover属性指定一个值

设置 popovercontroller popoverContentSize 属性

当你展示一个popover时,它就与界面中的某一部分发生了联系。Popovers通常与toolbarbutton发生联系,所以presentPopoverFromBarButtonItem:permittedArrowDirections:animated:方法是从应用程序toolbar显示Popover的便捷方式。你也可以使用presentPopoverFromRect:inView:permittedArrowDirections:animated:方法将popover与任一个视图相关联。


Popover通常从其显示的viewcontrollercontentSizeForViewInPopover属性中获得初始大小,该属性的缺省值为320×1100像素。你可以自定义通过为该属性赋值以改变popover的大小。你还可以通过修改popovercontrollerpopoverContentSize属性以达到相同的目的。如果你更改了在popovercontroller中显示的视图,则popovercontrollerpopoverContentSize属性也会被新展示视图的大小所覆盖。当popover显示时改变其展示的视图或popovercontroller的大小,则结果会以动画的效果加以展示。你还可以通过setPopoverContentSize:animated:方法更改popovercontroller的大小。


注:popovercontroller在屏幕上实际的显示位置取决于其自己并基于几点要素,包括你所要显示viewcontroller的大小,你要做为popview显示源的button或视图的位置以及显示箭头方向。


下面的代码展示了一个简单的动作方法:当用户点击toolbar上按钮时显示一个popoverPopover对象被要显示的其的viewcontroller对象所持有,popover的大小被设置为其所显示的视图的大小,但两种不必需相等。如果两种不相等,则必须使用scrollview来保证用户可以看到popover中的所有内容。

[plain]  view plain copy
  1. - (IBAction)toolbarItemTapped:(id)sender  
  2. {  
  3.     MyCustomViewController* content = [[MyCustomViewController alloc] init];  
  4.     UIPopoverController* aPopover = [[UIPopoverController alloc] initWithContentViewController:content];  
  5.     aPopover.delegate = self;   
  6.     [content release];  
  7.       
  8.     // Store the popover in a custom property for later use.   
  9.     self.popoverController = aPopover;   
  10.     [aPopover release];  
  11.       
  12.     [self.popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];  
  13. }  

Popovers在用户点击Popover视图以外的区域时会自动消失。在Popover内部进行点击不会使其自动消失,但是你可以调用dismissPopoverAnimated:方法使其消失。你可能需要在用户选择了viewcontroller中的某项或执行某个动作,需要将Popover在屏幕上消失时调用该方法。要使用该方法,你必须将popovercontroller对象保存在其显示的viewcontroller能访问的地方,系统并不为你提供当前所显示popover的引用。

声明Popover代理

当用户点击Popover视图以外的区域使Popover自动消失时,popover自动通知其代理该事件的发生。如果你提供了代理对象,则你可以通过该对象保持已消失的popover或对于popover消失执行额外的操作。代理方法popoverControllerShouldDismissPopover:可以让你控制是否popover是否真的需要消失。如果代理没有定义该方法或者你将声明的该方法返回YES,则popovercontroller使popover消失并发送popoverControllerDidDismissPopover:方法给其代理。

在大多数情况下,你根本不需要声明popoverControllerShouldDismissPopover:代理方法。这个代理方法通常使用在关闭一个popover可能会引起错误中。比起让该方法返回NO,更好的方法是避免设计关闭popover时却因为条件未满足而需该popover继续显示的情况,当有这种情况时最好使用Modalview来代替。

当调用popoverControllerDidDismissPopover:代理方法时,popover已被从屏幕上移除。在这个时候,如果你不想再使用该popovercontroller则可将其释放。你还可通过这个方法来更新用户界面或应用程序状态。

管理应用程序中popover的提示

当你编写popover相关代码时请考虑以下问题:

如果通过程序方式关闭popover,则你需要一个指向popovercontroller的引用。获得这个引用的唯一方法是你自己对其进行保存,通常在popover所显示的viewcontroller中进行保存。这个操作可以保证其所显示的viewcontroller可以在用户进行相关操作时关闭popover

Popovercontroller可以被重用。可以将原先创建的进行缓存而不是重新建个新的。Popovercontroller的可塑性很高,你可以为其指定不同的viewcontroller或每次使用时对其重新进行配置。

当显示一个popover时,为permittedArrowDirections参数指定UIPopoverArrowDirectionAny常量可以使箭头指向任一方向。指定该值可以让UIKit以最灵活的方式显示popover或控制其大小。如果你指定了某个确定的方法,则Popovercontroller可能会在显示popover之前对其大小进行压缩。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值