iOS开发UI篇—popoverController简单介绍

简介:

一、简单介绍

1.什么是UIPopoverController

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

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

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

2.使用步骤

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

(1)设置内容控制器

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

(2)设置内容的尺寸

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

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

二、具体的步骤

代码示例:

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

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

YYMenuViewController.m文件

复制代码
 1 //  2 // YYMenuViewController.m
 3 // 01-PopoverController简单介绍
 4 //  5 // Created by apple on 14-8-17.
 6 // Copyright (c) 2014年 yangyong. All rights reserved.
 7 //
 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文件

复制代码
 1 //  2 // YYViewController.m
 3 // 01-PopoverController简单介绍
 4 //  5 // Created by apple on 14-8-17.
 6 // Copyright (c) 2014年 yangyong. All rights reserved.
 7 //
 8  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,那么将会出现上面的错误。

目录
相关文章
|
14天前
|
前端开发 编解码 数据格式
浅谈响应式编程在企业级前端应用 UI 开发中的实践
浅谈响应式编程在企业级前端应用 UI 开发中的实践
15 0
浅谈响应式编程在企业级前端应用 UI 开发中的实践
|
25天前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
80 3
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
121 2
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
38 0
|
3月前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
42 2
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
89 2
|
3月前
|
API 开发工具 iOS开发
iOS 开发高效率工具包:10 大必备工具
iOS 开发高效率工具包:10 大必备工具
42 1
|
10天前
|
XML 开发工具 Android开发
构建高效的安卓应用:使用Jetpack Compose优化UI开发
【4月更文挑战第7天】 随着Android开发不断进化,开发者面临着提高应用性能与简化UI构建流程的双重挑战。本文将探讨如何使用Jetpack Compose这一现代UI工具包来优化安卓应用的开发流程,并提升用户界面的流畅性与一致性。通过介绍Jetpack Compose的核心概念、与传统方法的区别以及实际集成步骤,我们旨在提供一种高效且可靠的解决方案,以帮助开发者构建响应迅速且用户体验优良的安卓应用。
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
178 2
QGS
|
3月前
|
前端开发 数据可视化 Java
手拉手JavaFX UI控件与springboot3+FX桌面开发(下)
手拉手JavaFX UI控件与springboot3+FX桌面开发
QGS
57 0