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文件
//
// YYMenuViewController.m
// 01-PopoverController简单介绍
//
// Created by apple on 14-8-17.
// Copyright (c) 2014年 yangyong. All rights reserved.
// #import "YYMenuViewController.h" @interface YYMenuViewController ()
@property(nonatomic,strong)NSArray *menus;
@end @implementation YYMenuViewController -(NSArray *)menus
{
if (_menus==nil) {
_menus=@[@"列表1",@"列表2",@"列表3",@"列表4"];
}
return _menus;
}
- (void)viewDidLoad
{
[super viewDidLoad];
} -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return ;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.menus.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *ID=@"ID";
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:ID];
if (cell==nil) {
cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
} cell.textLabel.text=self.menus[indexPath.row];
return cell;
} @end
YYViewController.m文件
//
// YYViewController.m
// 01-PopoverController简单介绍
//
// Created by apple on 14-8-17.
// Copyright (c) 2014年 yangyong. All rights reserved.
// #import "YYViewController.h"
#import "YYMenuViewController.h" @interface YYViewController ()
@property(nonatomic,strong)UIPopoverController *popover;
@end @implementation YYViewController - (void)viewDidLoad
{
[super viewDidLoad];
} -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
//1.新建一个内容控制器
YYMenuViewController *menuVc=[[YYMenuViewController alloc]init]; //2.新建一个popoverController,并设置其内容控制器
self.popover=[[UIPopoverController alloc]initWithContentViewController:menuVc]; //3.设置尺寸
self.popover.popoverContentSize=CGSizeMake(, ); //4.显示
[self.popover presentPopoverFromBarButtonItem:self.navigationItem.leftBarButtonItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
@end
实现效果如下图:

说明:在storyboard中添加了导航控制器,并添加了两个按钮。

三、常见报错
在popover的使用过程中,经常会遇到这个错误
-[UIPopoverController dealloc] reached while popover is still visible.
错误的大体意思是:popover在仍旧可见的时候被销毁了(调用了dealloc)
从错误可以得出的结论
当popover仍旧可见的时候,不准销毁popover对象
在销毁popover对象之前,一定先让popover消失(不可见)
如:在上述代码中,如果不适用全局变量popover,那么将会出现上面的错误。
iOS开发UI篇—popoverController简单介绍的更多相关文章
- iOS开发UI篇—popoverController简单介绍(ipad)
一.简单介绍 1.什么是UIPopoverController 是iPad开发中常见的一种控制器(在iPhone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIVi ...
- iOS开发UI篇—UITabBarController简单介绍
iOS开发UI篇—UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarControlle ...
- iOS开发UI篇—Modal简单介绍
iOS开发UI篇—Modal简单介绍 一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展⽰出来 Modal的默认效果:新控制器从屏幕的 ...
- iOS开发UI篇—Kvc简单介绍
ios开发UI篇—Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observ ...
- iOS开发UI篇—UIWindow简单介绍
iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...
- iOS开发UI篇—Quartz2D简单介绍
iOS开发UI篇—Quartz2D简单介绍 一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\ ...
- 文顶顶 iOS开发UI篇—UITabBarController简单介绍 iOS开发UI篇—UITabBarController简单介绍
一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例 ...
- iOS开发UI篇—popoverController使用注意
iOS开发UI篇—popoverController使用注意 一.设置尺寸 提示:不建议,像下面这样吧popover的宽度和高度写死. //1.新建一个内容控制器 YYMenuViewControll ...
- iOS开发多线程篇—多线程简单介绍
iOS开发多线程篇—多线程简单介绍 一.进程和线程 1.什么是进程 进程是指在系统中正在运行的一个应用程序 每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内 比如同时打开QQ.Xcod ...
随机推荐
- Ubuntu文件操作命令
1.工具栏放下面或者左边的命令 gsettings set com.canonical.Unity.Launcher launcher-position Left gsettings set com. ...
- SpringMvc自定义拦截器
SpringMvc也可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义拦截器必须实现HandlerInterceptor接口 -preHandle():这个方法在业务处理器 ...
- jQuery对select操作小结
//遍历option和添加.移除optionfunction changeShipMethod(shipping){ var len = $("select[@name=ISHIPTYPE] ...
- paper 107:图像的白平衡
所谓白平衡(White Balance):指在图像处理的过程中,对原本材质为白色的物体的图像进行色彩还原,去除外部光源色温的影响,使其在照片上也显示白色.也就是不管在任何光源下,都能将白色物体还原为白 ...
- HTML5 Web Storage
Web Storage是HTML5 API提供一个新的重要的特性: 最新的Web Storage草案中提到,在web客户端可用html5 API,以Key-Value形式来进行数据持久存储: 目前主要 ...
- PhoneGap中navigator.notification.confirm的用法详解
navigator.notification.confirm('您确定要退出程序吗?', showConfirm, '退出程序', '确定,取消'); function showConfirm(but ...
- javascript中的自增与自减
一直都对自增与自减的执行顺序有点糊涂,今天查了资料,来总结一下 a++(a--),就是指当时计算a,当下一次使用这个变量的时候才执行++或者-- ++a(--a),就是指当时就计算++或者-- 例1: ...
- python的一些图像操作
from PIL import ImageGrabim = ImageGrab.grab()im.save("f:\\T.jpg",'jpeg') 直接用pyCharm安装PI ...
- Master page and jquery
1.download latest jqury http://jquery.com/download/ 2.download latest jquery.ui, Theme select " ...
- xcode 中 的工程模板
基于视图的应用程序(view-based application) 应用程序如果仅使用一个视图,应该使用这个模板.一个简单的视图控制器会管理应用程序的主视图,而界面布置则使用一个Interface B ...