什么是UIPopoverController

  • 是iPad开发中常见的一种控制器
  • 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController
  • 它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面

使用步骤

  • 要想显示一个UIPopoverController,需要经过下列步骤
  • 设置内容控制器
  • 由于UIPopoverController直接继承自NSObject,不具备可视化的能力
  • 因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,这个控制器称为“内容控制器”
  • 设置内容的尺寸
  • 显示出来占据多少屏幕空间
  • 设置显示的位置
  • 从哪个地方冒出来

  1.设置内容控制器

  • 设置内容控制器有3种方法
  • 在初始化UIPopoverController的时候传入一个内容控制器

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

  • @property (nonatomic, retain) UIViewController *contentViewController;
  • - (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;

以上方法和属性都是UIPopoverController的

  2.设置内容的尺寸

  • 设置内容的尺寸有2种方法
  • @property (nonatomic) CGSize popoverContentSize;
  • - (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;

  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的左上角为坐标原点(0,0)
  • arrowDirections :箭头的方向
  • animated :是否通过动画显示出来

常见报错

  • 在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,可以参考

iPad开发中UIPopoverController的使用的更多相关文章

  1. iOS开发——高级篇——iPad开发、iPad开发中的modal

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

  2. iOS开发中UIPopoverController的使用详解

    这篇文章主要介绍了iOS开发中UIPopoverController的使用,代码基于传统的Objective-C,需要的朋友可以参考下 一.简单介绍 1.什么是UIPopoverController ...

  3. iOS开发UI篇—iPad开发中得modal介绍

    iOS开发UI篇—iPad开发中得modal介绍 一.简单介绍 说明1: 在iPhone开发中,Modal是一种常见的切换控制器的方式 默认是从屏幕底部往上弹出,直到完全盖住后面的内容为止 说明2: ...

  4. 初学iPad开发入门

    iPad是一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑MacBook产品之间跟iPhone一样,搭载的是iOS操作系统 iPhone和iPad开发的区别 屏幕的 ...

  5. iOS iPad开发之UIPopoverController的使用

    1. 什么是UIPopoverController? 是iPad开发中常见的一种控制器(在iphone上不允许使用) 跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewCon ...

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

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

  7. iOS - 初学iPad开发入门

    iPad是一款苹果公司于2010年发布的平板电脑定位介于苹果的智能手机iPhone和笔记本电脑MacBook产品之间跟iPhone一样,搭载的是iOS操作系统 iPhone和iPad开发的区别 屏幕的 ...

  8. iOS开发中控制器切换方式Modal

    简介 在iPhone开发中 Modal是一种常见的切换控制器的方式 默认是从屏幕底部往上弹出,直到完全盖住后面的内容为止 在iPad开发中 Modal的使用频率也是非常高的 对比iPhone开发,Mo ...

  9. (一〇八)iPad开发之横竖屏适配

    在iPad开发中,横竖屏的视图常常是不同的,例如侧边栏Dock,在横屏时用于屏幕较宽,可以展示足够多的内容,每个按钮都可以展示出标题:而竖屏时Dock应该比较窄,只显示图标不现实按钮标题. iPad比 ...

随机推荐

  1. 第十四节,基本数据类型,列表list

    创建列表  #!/usr/bin/env python # -*- coding:utf-8 -*- a = ['alex', 'seven', 'eric'] #或 a = list(['alex' ...

  2. 命令 shell 学习

    for i in a b c do echo $i done !ser  历史补全 > 正确信息输出文件 >>正确信息输出文件  ,追加 2>错误信息输出文件 2>> ...

  3. 解决centos网速特别慢的最佳解决办法

    摘自:http://www.centoscn.com/CentosBug/osbug/2014/0614/3138.html 我使用了centOS,但是发现网速实在是卡得几乎不能上网,连百度都打不开, ...

  4. <marquee>,视频和音频的插入,正则表达式

    1.marquee 页面的自动滚动效果,不仅可以移动文字,也可以移动图片表格. <marquee></marquee>之间加内容即可. marquee的属性 1.滚动方向dir ...

  5. PHP数据库扩展mysqli的函数试题

    1.mysqli链接数据库的方式是什么? 2.mysqli获取链接错误号的属性是什么? 3.mysqli获取链接错误信息的属性是什么? 4.mysqli执行sql语句的函数是什么? 5.mysqli获 ...

  6. 硬盘安装win8系统方法汇总

    从硬盘安装 (推荐)硬盘安装方法一 使用Nt6 hdd installer进行安装,此方法适合XP,vista, Windows 7等系统. 下载Nt6 hdd installer(Win8硬盘安装工 ...

  7. IOS抓包工具paros的使用

    一,环境安装,软件安装 1.下载安装java JDK for Mac,可以从Oracle官网下载(但是一般Oracle的都是最新的版本的),或者从苹果的开发者网站下载,我是从苹果官网下载的javafo ...

  8. MVC 和 MVVM

    MVVM MVVM 是 Model-View-ViewModel 的简写,MVVM 模式和 MVC 模式一样,主要目的是分离视图(View)和模型(Model) MVC 回顾 MVC 结构图 MVC ...

  9. 直接用postman测试api ,服务器端没提供跨域也可以访问。

    1. 直接用postman测试api ,服务器端没提供跨域也可以访问. 但是,如果用本地的 sever 搭的server, 然后去访问api的话,浏览器会提示 跨域错误.

  10. NSTimer内存方面的探究

    今天研究一个框架,看到它对NSTimer的处理,感觉很有意思.于是自己在各种情况下都研究了一下,现总结如下. 我们用到NSTimer时,似乎习惯于会在dealloc方法中把它invalidate掉,但 ...