iPad开发 - UIPopoverController控制器
iPad简介
什么是iPad
一款苹果公司于2010年发布的平板电脑
定位介于苹果的智能手机iPhone和笔记本电脑产品之间
跟iPhone一样,搭载的是iOS操作系统
iPad的市场情况
截止至2013年10月23日,iPad已经累计销售1.7亿台
在平板市场的占有率高达81%
iPhone和iPad开发的区别
iPhone是手机,iPad、iPad Mini是平板电脑
iPhone和iPad开发的区别
屏幕的尺寸 \分辨率
UI元素的排布 \设计
键盘
API
屏幕方向的支持
… …
屏幕的尺寸 \分辨率
在iOS开发中,只需要关注以下几种情况
iPhone
3.5 inch:320 x 480
4.0 inch:320 x 568
iPad、iPad Mini
9.7 inch、7.9 inch:768 x 1024
屏幕方向的支持
iPhone支持3个方向
iPad支持4个方向
开发细节
设备支持的应用程序
iPhone上只能运行iPhone程序
iPad上能够运行iPhone \ iPad程序
开发过程
iPhone和iPad开发的流程是一致的
在iPhone开发中学到的所有知识基本都能用在iPad上
UIPopoverController
什么是UIPopoverController
是iPad开发中常见的一种控制器(在iPhone上不允许使用)
跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController
它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面
要想显示一个UIPopoverController,需要经过下列步骤
设置内容控制器
由于UIPopoverController直接继承自NSObject,不具备可视化的能力
因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,这个控制器称为“内容控制器”
设置内容的尺寸
显示出来占据多少屏幕空间
设置显示的位置
从哪个地方冒出来
设置内容控制器
设置内容控制器有3种方法
//在初始化UIPopoverController的时候传入一个内容控制器
- (id)initWithContentViewController:(UIViewController *)viewController;@property (nonatomic, retain) UIViewController *contentViewController;- (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;//以上方法和属性都是UIPopoverController的
设置内容的尺寸
设置内容的尺寸有2种方法
@property (nonatomic) CGSize popoverContentSize;- (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;//以上方法和属性都是UIPopoverController的
设置显示的位置
设置显示的位置有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的左上角为坐标原点(0,0)
//arrowDirections :箭头的方向
//animated :是否通过动画显示出来
//如果想让箭头指向某一个UIView的做法有2种做法,比如指向一个button
方法1
[popover presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];方法2
[popover presentPopoverFromRect:button.frame inView:button.superview permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
rect和view参数
常见报错
在popover的使用过程中,经常会遇到这个错误
-[UIPopoverController dealloc] reached while popover is still visible.
错误的大体意思是:popover在仍旧可见的时候被销毁了(调用了dealloc)
从错误可以得出的结论
当popover仍旧可见的时候,不准销毁popover对象
在销毁popover对象之前,一定先让popover消失(不可见)
通过内容控制器设置内容尺寸
//内容控制器可以自行设置自己在popover中显示的尺寸
在iOS 7之前
@property (nonatomic,readwrite) CGSize contentSizeForViewInPopover;从iOS 7开始
@property (nonatomic) CGSize preferredContentSize;
以上属性都是UIViewController的
常用属性
代理对象
@property (nonatomic, assign) id <UIPopoverControllerDelegate> delegate;是否可见
@property (nonatomic, readonly, getter=isPopoverVisible) BOOL popoverVisible;箭头方向
@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection;关闭popover(让popover消失)
- (void)dismissPopoverAnimated:(BOOL)animated;
防止点击UIPopoverController区域外消失
默认情况下
只要UIPopoverController显示在屏幕上,UIPopoverController背后的所有控件默认是不能跟用户进行正常交互的
点击UIPopoverController区域外的控件,UIPopoverController默认会消失
要想点击UIPopoverController区域外的控件时不让UIPopoverController消失,解决办法是设置passthroughViews属性
@property (nonatomic, copy) NSArray *passthroughViews;
这个属性是设置当UIPopoverController显示出来时,哪些控件可以继续跟用户进行正常交互。这样的话,点击区域外的控件就不会让UIPopoverController消失了
如何iPhone中实现popover的效果
UIPopoverController这个类是只能用在iPad中的
要想在iPhone中实现popover效果,必须得自定义view,可以参考
http://code4app.com/ios/Popover-View-in-iPhone/4fa931bd06f6e78d0f000000
http://code4app.com/ios/Popup-Menu/512231ac6803fa9e08000000
UIPopoverController实例
@interface ViewController ()
- (IBAction)popMenu:(id)item;
@property (nonatomic, strong) UIPopoverController *popover;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];}// -[UIPopoverController dealloc] reached while popover is still visible.
// 当popover还在显示的时候,它就挂了
// 不允许popover还在显示的时候挂掉
// popover必须在消失的时候挂掉/*** 弹出Popover菜单*/
- (IBAction)popMenu:(id)item {// 0.内容HMMenuViewController *menu = [[HMMenuViewController alloc] init];// 1.创建一个UIPopoverUIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:[[UINavigationController alloc] initWithRootViewController:menu]];// 2.设置尺寸
// popover.popoverContentSize = CGSizeMake(320, 44 * 5);// 3.从哪里显示出来 --> 指向item[popover presentPopoverFromBarButtonItem:item permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];self.popover = popover;
}
@end
@interface MenuViewController ()
@property (nonatomic, strong) NSArray *titles;
@end@implementation MenuViewController- (void)viewDidLoad {[super viewDidLoad];self.titles = @[@"设置", @"清除缓存", @"退出", @"基本信息"];self.title = @"菜单";self.view.backgroundColor = [UIColor blueColor];CGFloat w = 320;CGFloat h = self.titles.count * 44;self.preferredContentSize = CGSizeMake(w, h);
// self.contentSizeForViewInPopover = CGSizeMake(w, h);
}#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return self.titles.count;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *ID = @"cell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];if (!cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];}cell.textLabel.text = self.titles[indexPath.row];return cell;
}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{UIViewController *vc = [[UIViewController alloc] init];vc.view.backgroundColor = [UIColor redColor];[self.navigationController pushViewController:vc animated:YES];
}@end
UIPopoverController其他用法
@interface ViewController () <ColorsViewControllerDelegate, UIPopoverControllerDelegate>
- (IBAction)buttonClick:(UIButton *)btn;
@property (nonatomic, weak) UIButton *colorButton;
@property (nonatomic, strong) UIPopoverController *popover;
@property (weak, nonatomic) IBOutlet UIButton *greenButton;- (IBAction)greenButtonClick;
@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];}- (IBAction)greenButtonClick {NSLog(@"greenButtonClick");
}- (IBAction)buttonClick:(UIButton *)btn {// 0.内容HMColorsViewController *colors = [[HMColorsViewController alloc] init];colors.delegate = self;// 1.创建self.popover = [[UIPopoverController alloc] initWithContentViewController:colors];self.popover.delegate = self;//2.显示[self.popover presentPopoverFromRect:CGRectMake(150, 150, 100, 100) inView:btn.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];[self.popover presentPopoverFromRect:CGRectMake(924, 668, 100, 100) inView:btn.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];[self.popover presentPopoverFromRect:btn.bounds inView:btn permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];[self.popover presentPopoverFromRect:btn.frame inView:btn.superview permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];// 3.设置哪里控件在popover显示出来的时候,仍旧可以跟用户进行交互self.popover.passthroughViews = @[self.greenButton];self.colorButton = btn;
}#pragma mark - 颜色选择代理
- (void)colorsViewController:(HMColorsViewController *)vc didSelectColor:(UIColor *)color
{self.colorButton.backgroundColor = color;// 关闭popover[self.popover dismissPopoverAnimated:YES];
}#pragma mark - popover的代理
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
// NSLog(@"popover销毁了");
}
@end
#import <UIKit/UIKit.h>
@class ColorsViewController;@protocol ColorsViewControllerDelegate <NSObject>@optional
- (void)colorsViewController:(ColorsViewController *)vc didSelectColor:(UIColor *)color;
@end@interface ColorsViewController : UITableViewController
@property (nonatomic, weak) id<ColorsViewControllerDelegate> delegate;
@end
@implementation ColorsViewController- (void)viewDidLoad {[super viewDidLoad];self.tableView.separatorStyle = UITableViewCellSeparatorStyleNone;
}- (void)didReceiveMemoryWarning {[super didReceiveMemoryWarning];// Dispose of any resources that can be recreated.
}#pragma mark - Table view data source
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {return 30;
}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *ID = @"cell";UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];if (!cell) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];cell.selectionStyle = UITableViewCellSelectionStyleNone;}cell.backgroundColor = [UIColor colorWithRed:arc4random_uniform(255)/255.0 green:arc4random_uniform(255)/255.0 blue:arc4random_uniform(255)/255.0 alpha:1.0];return cell;
}- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{if ([self.delegate respondsToSelector:@selector(colorsViewController:didSelectColor:)]) {UIColor *color = [tableView cellForRowAtIndexPath:indexPath].backgroundColor;[self.delegate colorsViewController:self didSelectColor:color];}
}
@end
iPad开发 - UIPopoverController控制器相关推荐
- iPad开发(相对于iPhone开发时专有的API)
iPad开发 一.iPad开发简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定价介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2. ...
- iPhone与iPad开发实战读书笔记
iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...
- iOS iPad开发~笔记 01
//联系人:石虎 QQ: 1224614774昵称:嗡嘛呢叭咪哄 IPAD 一.iPad开发 1. 了解什么是iPad 2.掌握iphone与ipad的开发时区别(尺寸.点.排版.键盘.API.屏幕 ...
- 《iPad开发从入门到精通》——6.2节系统主界面
本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.2节系统主界面,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.2 系统主界 ...
- 《iPad开发从入门到精通》——6.4节收藏历史
本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.4节收藏历史,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.4 收藏历史 ...
- 《iPad开发从入门到精通》——6.3节站站查询
本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.3节站站查询,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.3 站站查询 ...
- 《iPad开发从入门到精通》——6.6节系统设置
本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.6节系统设置,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.6 系统设置 ...
- iPhone 4与iPad开发基础教程
iPhone 4与iPad开发基础教程 创造销售奇迹的经典著作 针对iOS SDK新特性全面改版 从这里,拥抱软件开发的未来 基本信息 原书名:Beginning iPhone 4 Developme ...
- iPad开发基础知识
转载自:http://www.cocoachina.com/bbs/simple/?t82559.html iPad开发基础知识 iPad平板电脑程序开发基础规则 苹果在今天凌晨发布了10寸平板电脑: ...
最新文章
- Python将classification_report的结论转化为字典(dict)形式并提取模型的灵敏度(sensitivity)、特异度(specificity)、PPV和NPV指标、混淆矩阵图
- 记一次错误的伪静态配置文件
- github Android-Universal-Image-Loader
- 【Transformer】SMCA: Fast Convergence of DETR with Spatially Modulated Co-Attention
- ubuntu中文输入法fcitx的安装以及出现方块的解决方法
- linux ssd硬盘做缓存,linux系统中ssd当块设备缓存
- R语言安装ccgarch_R语言基于ARMA-GARCH过程的VaR拟合和预测
- 盘点前 10 名的免费跨浏览器测试工具
- SQL数据库中日期时间类型,按日期group by 实现
- q讯家园看加密空间 官方免费版
- 清理C盘——这个操作让你的C盘多出20G空间
- 高通平台开发系列讲解(USB篇)Vbus检测程序
- 仿网易严选微信小程序
- 偏导数与全导数的关系 以及 偏微分与全微分的关系
- 倍福--授权等级的区别
- memwatch的使用(一)
- Chrome插件:UserAgent Switcher 浏览器UA切换插件 平台与浏览器可独立选择
- 串口调试助手版本合集
- take sth. with a grain of salt
- 六大云端 Jupyter Notebook 平台测评
热门文章
- 零代码/无代码 vs 低代码 如何分类?如何区别?到底有什么不同?分析超过20款零代码低代码产品
- java常用英文翻译
- CentOS7搭建LNMP+WordPress一篇搞定
- 杂谈(10)分享xiaobenny的辞职信
- weui.js 的使用
- 关于python编程——从入门到实践一书的详细学习笔记(1)
- 代码越“整洁”,性能越“拉胯”?
- python有哪些编译器
- cad绘制正八边形_cad怎么绘制绘制八角凳图纸?
- PHP酰胺_PHPA是什么意思