popoverController简单介绍

一、简单介绍

1.什么是UIPopoverController

是iPad开发中常见的一种控制器(在iPhone上不允许使用)

跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController

它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面

2.使用步骤

要想显示一个UIPopoverController,需要经过下列步骤

(1)设置内容控制器

  由于UIPopoverController直接继承自NSObject,不具备可视化的能力。因此UIPopoverController上面的内容必须由另外一个继承自UIViewController的控制器来提供,这个控制器称为“内容控制器”

(2)设置内容的尺寸

  显示出来占据多少屏幕空间

(3)显示,即从哪个地方冒出来

二、具体的步骤

代码示例:

新建一个ipad项目,编写如下代码: 

新建一个继承自UITableView的控制器,让其作为popoverController的内容控制器。

YYMenuViewController.m文件

 8 9 #import "YYMenuViewController.h"
10
11 @interface YYMenuViewController ()
12 @property(nonatomic,strong)NSArray *menus;
13 @end
14
15 @implementation YYMenuViewController
16
17 -(NSArray *)menus
18 {
19     if (_menus==nil) {
20         _menus=@[@"列表1",@"列表2",@"列表3",@"列表4"];
21     }
22  return _menus;
23 }
24 - (void)viewDidLoad
25 {
26     [super viewDidLoad];
27 }
28
29 -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
30 {
31     return 1;
32 }
33 -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
34 {
35     return self.menus.count;
36 }
37 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
38 {
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文件

 18 9 #import "YYViewController.h"
10 #import "YYMenuViewController.h"
11
12 @interface YYViewController ()
13 @property(nonatomic,strong)UIPopoverController *popover;
14 @end
15
16 @implementation YYViewController
17
18 - (void)viewDidLoad
19 {
20     [super viewDidLoad];
21 }
22
23 -(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
24 {
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,那么将会出现上面的错误。

转载于:https://www.cnblogs.com/crash-wu/p/4797374.html

popoverController简单介绍相关推荐

  1. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  2. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  3. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...

  4. 2021年大数据ELK(二):Elasticsearch简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Elasticsearch简介 1.介绍 2.创始人 二.E ...

  5. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  6. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  7. LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍

    LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍 LVS (Linux Virtual Server) LVS(Linux Virtual Server)其实就是 ...

  8. dubbo学习过程、使用经验分享及实现原理简单介绍

    一.前言 部门去年年中开始各种改造,第一步是模块服务化,这边初选dubbo试用在一些非重要模块上,慢慢引入到一些稍微重要的功能上,半年时间,学习过程及线上使用遇到的些问题在此总结下. 整理这篇文章差不 ...

  9. iOS开发UI篇—UIWindow简单介绍

    iOS开发UI篇-UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWi ...

最新文章

  1. 安装MYSQL最低的RAM_安装MySQL后,需要调整的10个性能配置项
  2. BUUCTF-misc另外一个世界 8个二进制数为一组转ASC码
  3. python红色的颜色表达式_50行Python代码实现视频中物体颜色识别和跟踪(必须以红色为例)...
  4. 用SAP WebIDE将CRUD Master-Detail应用打包成Hybrid App
  5. UI5 xml view里control id的生成逻辑
  6. 暴走大侠显示进入服务器失败,暴走大侠:常见问题详解,再遇见这样的问题也不再迷糊...
  7. mysql中profile的使用
  8. TypeScript和vuejs 搭建webpack,初次体验
  9. 用shell写的ftp工具
  10. c语言网吧添加卡,c语言网吧计费系统源代码.docx
  11. HTTP服务器项目详解
  12. 74系列芯片功能说明
  13. 人脸检测高级:疲劳检测
  14. ubuntu如何安装本地deb文件
  15. android PIN码解锁流程
  16. cyclic behavior during switching
  17. RTL8367SC单芯片做千兆2光5电
  18. MFRC53101TOFE小知识
  19. 大数据时代,为什么很多JAVA程序员会转型做JAVA大数据
  20. Salesforce市值3000亿美元,中国CRM企业能复制成功吗?

热门文章

  1. 去年每天入账25个亿,没错,我就是佩奇
  2. 首个中国AI芯片收购案完成:深鉴创立2年后并入赛灵思
  3. 全球最大的第一视角视频数据集开源,取自真实生活,还能提升厨艺
  4. 史上最大规模机器人“面相”调查:157张脸背后的人类感受
  5. 一文简介常见的机器学习算法
  6. 通过反编译让SpecFlow支持多层属性值的验证
  7. 4.3 现在可用的客体类有哪些呢
  8. javascript 商务通
  9. 我的Android进阶之旅------Android检测wifi连接状态
  10. springboot+druid+mybatis+mysql+多数据源