首页 > 代码库 > iOS开发UI篇—popoverController简单介绍
iOS开发UI篇—popoverController简单介绍
iOS开发UI篇—popoverController简单介绍
一、简单介绍
1.什么是UIPopoverController
是iPad开发中常见的一种控制器(在iPhone上不允许使用)
跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController
它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面
2.使用步骤
要想显示一个UIPopoverController,需要经过下列步骤
(1)设置内容控制器
由于UIPopoverController直接继承自NSObject,不具备可视化的能力。因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,这个控制器称为“内容控制器”
(2)设置内容的尺寸
显示出来占据多少屏幕空间
(3)显示,即从哪个地方冒出来
二、具体的步骤
代码示例:
新建一个ipad项目,编写如下代码:
新建一个继承自UITableView的控制器,让其作为popoverController的内容控制器。
YYMenuViewController.m文件
1 // 2 // YYMenuViewController.m 3 // 01-PopoverController简单介绍 4 // 5 // Created by apple on 14-8-17. 6 // Copyright (c) 2014年 yangyong. All rights reserved. 7 // 8 9 #import "YYMenuViewController.h"10 11 @interface YYMenuViewController ()12 @property(nonatomic,strong)NSArray *menus;13 @end14 15 @implementation YYMenuViewController16 17 -(NSArray *)menus18 {19 if (_menus==nil) {20 _menus=@[@"列表1",@"列表2",@"列表3",@"列表4"];21 }22 return _menus;23 }24 - (void)viewDidLoad25 {26 [super viewDidLoad];27 }28 29 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView30 {31 return 1;32 }33 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section34 {35 return self.menus.count;36 }37 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath38 {39 static NSString *ID=@"ID";40 UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];41 if (cell==nil) {42 cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];43 }44 45 cell.textLabel.text=self.menus[indexPath.row];46 return cell;47 }48 49 @end
YYViewController.m文件
1 // 2 // YYViewController.m 3 // 01-PopoverController简单介绍 4 // 5 // Created by apple on 14-8-17. 6 // Copyright (c) 2014年 yangyong. All rights reserved. 7 // 8 9 #import "YYViewController.h"10 #import "YYMenuViewController.h"11 12 @interface YYViewController ()13 @property(nonatomic,strong)UIPopoverController *popover;14 @end15 16 @implementation YYViewController17 18 - (void)viewDidLoad19 {20 [super viewDidLoad];21 }22 23 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event24 {25 //1.新建一个内容控制器26 YYMenuViewController *menuVc=[[YYMenuViewController alloc]init];27 28 //2.新建一个popoverController,并设置其内容控制器29 self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc];30 31 //3.设置尺寸32 self.popover.popoverContentSize=CGSizeMake(300, 200);33 34 //4.显示35 [self.popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];36 }37 @end
实现效果如下图:
说明:在storyboard中添加了导航控制器,并添加了两个按钮。
三、常见报错
在popover的使用过程中,经常会遇到这个错误
-[UIPopoverController dealloc] reached while popover is still visible.
错误的大体意思是:popover在仍旧可见的时候被销毁了(调用了dealloc)
从错误可以得出的结论
当popover仍旧可见的时候,不准销毁popover对象
在销毁popover对象之前,一定先让popover消失(不可见)
如:在上述代码中,如果不适用全局变量popover,那么将会出现上面的错误。