ios-day25-02(iPad开发之UIPopoverController)

本文详细介绍了UIPopoverController的原理及使用方法,包括其在iPad应用中的特性、如何创建及设置内容控制器、设置显示位置和尺寸等。此外还提供了在iPhone上实现类似效果的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1,什么是UIPopoverController

1.1,是iPad开发中常见的一种控制器(在iPhone中不能使用)

1.2,跟其他控制器不一样的是,它直接继承自NSObject,而不是继承自UIViewController

1.3,它只占用部分屏幕控件来呈现信息,而且显示在屏幕的最前面


2,使用步骤

2.1,设置内容控制器。由于UIPopoverController直接继承自NSObject,不具备可视化能力,

因此UIPopoverController上面的内容必须由另外一个UIViewController的控制器来提供,这个控制器称为"内容控制器"。

设置内容控制器有3种方法:

- (id)initWithContentViewController:(UIViewController *)viewController;

@property (nonatomic, retain) UIViewController *contentViewController;

- (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;

以上方法和属性都是UIPopoverController的

2.2,设置内容的尺寸

设置内容的尺寸有2种方法:

// ios6.0

@property (nonatomicCGSize popoverContentSize;

- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;

@property (nonatomic) CGSize preferredContentSize;

// ios7.0

- (void)setPreferredContentSize:(CGSize)size animated:(BOOL)animated;

以上方法和属性都是UIPopoverController的

2.3,设置显示的位置

设置显示的位置有2种方法:

围绕着一个UIBarButtonItem显示(箭头指定那个UIBarButtonItem)

- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

item:围绕着哪个UIBarButtonItem显示

arrowDirections:箭头的方向

animated:是否通过动画显示出来


围绕着某一块特定区域显示(箭头指定那块特定区域)

- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

rect:指定箭头所指区域的矩形框范围(位置和尺寸)

view:rect参数是以view的左上角为坐标原点

arrowDirections:箭头的方向

animated:是否通过动画显示出来

rect和view参数的关系如图:



如果想要让箭头指向某一个UIView的做法有2种:

方法1:

[popover presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

方法2:

[popover presentPopoverFromRect:button.frame inView:button.superview permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];


2.4,通过内容控制器设置内容尺寸

内容控制器可以自行设置自己在popover中的尺寸

ios7之前:

@property (nonatomic,readwrite) CGSize contentSizeForViewInPopover;

ios7之后:

@property (nonatomic) CGSize preferredContentSize;

以上属性都是UIViewController


2.5,UIPopoverController的常见属性:

代理对象

@property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate;


是否可见

@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;


箭头方向

@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;


关闭popover(让popover消失)

- (void)dismissPopoverAnimated:(BOOL)animated;


2.6,防止点击UIPopoverController区域外消失:

默认情况下

只要UIPopoverController显示在屏幕上,UIPopoverController背后的所有控件默认是不能跟用户进行正常交互的

点击UIPopoverController区域外的控件,UIPopoverController默认会消失


要想点击UIPopoverController区域外的控件时不让UIPopoverController消失,解决办法是设置passthroughViews属性

@property (nonatomic, copy) NSArray *passthroughViews;

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


2.7,iPhone中如何实现popover效果:

UIPopoverController这个类是只能用在iPad中的


要想在iPhone中实现popover效果,必须得自定义view,可以参考

http://code4app.com/ios/Popover-View-in-iPhone/4fa931bd06f6e78d0f000000

http://code4app.com/ios/Popup-Menu/512231ac6803fa9e08000000



最后是一个Demo,演示了UIPopoverController的使用

效果图:


github地址:https://github.com/liujie537192/iPAD

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值