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控制器相关推荐

  1. iPad开发(相对于iPhone开发时专有的API)

    iPad开发 一.iPad开发简介 1.什么是iPad 一款苹果公司于2010年发布的平板电脑 定价介于苹果的智能手机iPhone和笔记本电脑产品之间 跟iPhone一样,搭载的是iOS操作系统 2. ...

  2. iPhone与iPad开发实战读书笔记

    iPhone开发一些读书笔记 手机应用分类 1.教育工具 2.生活工具 3.社交应用 4.定位工具 5.游戏 6.报纸和杂志的阅读器 7.移动办公应用 8.财经工具 9.手机购物应用 10.风景区相关 ...

  3. iOS iPad开发~笔记 01

    //联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄 IPAD 一.iPad开发 1. 了解什么是iPad 2.掌握iphone与ipad的开发时区别(尺寸.点.排版.键盘.API.屏幕 ...

  4. 《iPad开发从入门到精通》——6.2节系统主界面

    本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.2节系统主界面,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.2 系统主界 ...

  5. 《iPad开发从入门到精通》——6.4节收藏历史

    本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.4节收藏历史,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.4 收藏历史 ...

  6. 《iPad开发从入门到精通》——6.3节站站查询

    本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.3节站站查询,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.3 站站查询 ...

  7. 《iPad开发从入门到精通》——6.6节系统设置

    本节书摘来自异步社区<iPad开发从入门到精通>一书中的第6章,第6.6节系统设置,作者 杨春泽,更多章节内容可以访问云栖社区"异步社区"公众号查看 6.6 系统设置 ...

  8. iPhone 4与iPad开发基础教程

    iPhone 4与iPad开发基础教程 创造销售奇迹的经典著作 针对iOS SDK新特性全面改版 从这里,拥抱软件开发的未来 基本信息 原书名:Beginning iPhone 4 Developme ...

  9. iPad开发基础知识

    转载自:http://www.cocoachina.com/bbs/simple/?t82559.html iPad开发基础知识 iPad平板电脑程序开发基础规则 苹果在今天凌晨发布了10寸平板电脑: ...

最新文章

  1. Python将classification_report的结论转化为字典(dict)形式并提取模型的灵敏度(sensitivity)、特异度(specificity)、PPV和NPV指标、混淆矩阵图
  2. 记一次错误的伪静态配置文件
  3. github Android-Universal-Image-Loader
  4. 【Transformer】SMCA: Fast Convergence of DETR with Spatially Modulated Co-Attention
  5. ubuntu中文输入法fcitx的安装以及出现方块的解决方法
  6. linux ssd硬盘做缓存,linux系统中ssd当块设备缓存
  7. R语言安装ccgarch_R语言基于ARMA-GARCH过程的VaR拟合和预测
  8. 盘点前 10 名的免费跨浏览器测试工具
  9. SQL数据库中日期时间类型,按日期group by 实现
  10. q讯家园看加密空间 官方免费版
  11. 清理C盘——这个操作让你的C盘多出20G空间
  12. 高通平台开发系列讲解(USB篇)Vbus检测程序
  13. 仿网易严选微信小程序
  14. 偏导数与全导数的关系 以及 偏微分与全微分的关系
  15. 倍福--授权等级的区别
  16. memwatch的使用(一)
  17. Chrome插件:UserAgent Switcher 浏览器UA切换插件 平台与浏览器可独立选择
  18. 串口调试助手版本合集
  19. take sth. with a grain of salt
  20. 六大云端 Jupyter Notebook 平台测评

热门文章

  1. 零代码/无代码 vs 低代码 如何分类?如何区别?到底有什么不同?分析超过20款零代码低代码产品
  2. java常用英文翻译
  3. CentOS7搭建LNMP+WordPress一篇搞定
  4. 杂谈(10)分享xiaobenny的辞职信
  5. weui.js 的使用
  6. 关于python编程——从入门到实践一书的详细学习笔记(1)
  7. 代码越“整洁”,性能越“拉胯”?
  8. python有哪些编译器
  9. cad绘制正八边形_cad怎么绘制绘制八角凳图纸?
  10. PHP酰胺_PHPA是什么意思