码迷,mamicode.com
首页 > 其他好文 > 详细

UIPopoverController简单实用

时间:2014-08-05 13:36:49      阅读:621      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   io   strong   ar   cti   

一:简介

•UIPopoverController是在iPad开发中常用的一个组件(在iPhone上不允许使用),使用非常简单
•UIPopoverController也是一个控制器,跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController
•它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面

二:使用步骤

要想成功显示一个UIPopoverController,需要经过下列步骤:

1>设置内容控制器

    由于UIPopoverController直接继承自NSObject,不具备可视化的能力,因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,这个称为“内容控制器”

设置内容控制器有三种方法:
- (id)initWithContentViewController:(UIViewController *)viewController;
在初始化UIPopoverController的时候传入一个内容控制器

@property (nonatomic, retain) UIViewController *contentViewController;
通过@property设置内容控制器

- (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;
   animated可以指定设置内容控制器时要不要带有动画效果
2>设置内容的尺寸
     显示出来占据多少屏幕空间
设置内容的尺寸有两种方法:
@property (nonatomic) CGSize popoverContentSize;

- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;
3>设置显示的位置

    从哪个地方冒出来

设置显示的位置有两种方法:
- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
这个方法需要传入一个CGRect和一个View,用来设置箭头指向的位置
这个CGRect的值是相对于这个View的,也就是说CGRect以View的左上角为坐标原点(0, 0)

举个例子,如果你要箭头指向被点击的button,那么
第一种方法是:
[pop presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
第二种方法是:
[pop presentPopoverFromRect:button.frame inView:button.superview permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
箭头会指向某一个UIBarButtonItem

三:使用注意

1>假如iPad的屏幕发生了旋转,UIPopoverController显示的位置可能会改变,那么就需要重写控制器的某个方法

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

在上面的方法中重写设置UIPopoverController显示的位置

 

2>UIPopoverController和UIActionSheet有点不一样,需要自己管理内存

u必须retain这个UIPopoverController对象
u在ARC中,也就是用一个强引用来引用它
•在释放(调用dealloc)UIPopoverController对象之前一定要先dismiss
•在ARC下UIPopoverController的正确用法
(1)用一个强引用(成员变量或strong的@property)保存UIPopoverController对象

_pop = [[UIPopoverController alloc] initWithContentViewController:vc];

(2)设置UIPopoverController的delegate
在- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController代理方法中将强引用清空

- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController

{

    _pop = nil;

}

3>防止点击UIPopoverController区域外消失

•默认情况下,只要UIPopoverController显示在屏幕上,UIPopoverController背后的所有控件默认是不能跟用户进行正常交互的,点击UIPopoverController区域外的控件后,UIPopoverController会默认消失
•要想点击UIPopoverController区域外的控件时UIPopoverController不消失,解决办法是设置UIPopoverController的passthroughViews属性

@property (nonatomic, copy) NSArray *passthroughViews;

这个属性是设置当UIPopoverController显示出来时,哪些控件可以继续跟用户进行正常交互。这样的话,点击区域外的控件就不会让UIPopoverController消失了

4>外观

有2个属性可以微调UIPopoverController的外观

@property (nonatomic, readwrite) UIEdgeInsets popoverLayoutMargins

这个属性可以调整显示的位置,设置跟默认显示位置的间距,比如UIEdgeInsetsMake(0, 0, 0, 40)代表距离默认显示位置有40的间距

@property (nonatomic, readwrite, retain) Class popoverBackgroundViewClass

这个属性可以修改UIPopoverController的背景样式,需要设置一个继承了UIPopoverBackgroundView的子类类名,子类通过实现相应的方法来修改外观

四:其它属性与方法

@property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate;
UIPopoverController的代理

@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;
UIPopoverController是否可见

@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;
箭头的方向

- (void)dismissPopoverAnimated:(BOOL)animated;
关闭UIPopoverController,会触发相应的代理方法

 

UIPopoverController简单实用,布布扣,bubuko.com

UIPopoverController简单实用

标签:style   blog   color   使用   io   strong   ar   cti   

原文地址:http://www.cnblogs.com/yaoxc/p/3891788.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!