iOS开发UI篇—popoverController简单介绍

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         [email protected][@"列表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,那么将会出现上面的错误。

iOS开发UI篇—popoverController简单介绍

时间: 2024-10-13 02:45:52

iOS开发UI篇—popoverController简单介绍的相关文章

iOS开发UI篇-UIWindow简单介绍

iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow.也就说,没有UIWindow,就看不见任何UI界面 补充:UIWindow是创建的第一个视图控件(创建的第一个

文顶顶 iOS开发UI篇—Kvc简单介绍

ios开发UI篇—Kvc简单介绍 一.KVC简单介绍 KVC key valued coding 键值编码 KVC通过键值间接编码 补充: 与KVC相对的时KVO,即key valued observer 键值观察.监听某一个模型的属性,只要模型属性的值一变化就通知你. 二.使用KVC 1.KVC基本使用介绍 (1)代码示例: 新建一个命令行项目,用以演示KVC的用法 完成之后为项目添加一个Person类. 为Person类添加两个属性(name和age),注意这两个属性的类型. 1 #impo

iOS开发UI篇—UIWindow简单介绍

iOS开发UI篇—UIWindow简单介绍 - 文顶顶 - 博客园 文顶顶 iOS开发UI篇—UIWindow简单介绍 iOS开发UI篇—UIWindow简单介绍 一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWi

iOS开发UI篇—Modal简单介绍

iOS开发UI篇—Modal简单介绍 一.简单介绍 除了push之外,还有另外一种控制器的切换方式,那就是Modal 任何控制器都能通过Modal的形式展?出来 Modal的默认效果:新控制器从屏幕的最底部往上钻,直到盖住之前的控制器为? 二.代码说明 新建一个项目,在Application的代理中添加window和控制器. TXAppDelegate.m文件 1 #import "TXAppDelegate.h" 2 #import "TXOneViewController

iOS开发UI篇—UITableBarController简单介绍

iOS开发UI篇-UITabBarController简单介绍 一.简单介绍 UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例子就是QQ.微信等应?. 二.UITabBarController的使用 1.使用步骤: (1)初始化UITabBarController (2)设置UIWindow的rootViewController为UITabBarControl

iOS开发UI篇—Quartz2D简单介绍

iOS开发UI篇—Quartz2D简单介绍 一.什么是Quartz2D Quartz 2D是?个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 二.Quartz2D在iOS开发中的价值 为了便于搭建美观的UI界面,iOS提供了UIKit框架,??有各种各样的UI控件 UILabel:显?文字UIImageView:显示图片UIButton:同

iOS开发UI篇—UITableBarController简单介绍 - 文顶顶

原文  http://www.cnblogs.com/wendingding/p/3775488.html iOS开发UI篇—UITableBarController简单介绍 一.简单介绍 UITableBarController 和UINavigationController 类似, UITabBarController 也可以轻松地管理多个控制器,轻松完成控制器之间的切换,典型的例子就是 QQ .微信等应?. 二.UITableBarController的使用 1.使用步骤: (1) 初始化

iOS开发UI篇—事件处理简单介绍1

iOS开发UI篇—事件处理简单介绍 一.事件处理简单介绍 说明:ios中的事件 在用户使用app过程中,会产生各种各样的事件 ,iOS中的事件可以分为3大类型 : 1.响应者对象 在iOS中不是任何对象都能处理事件,只有继承了UIResponder的对象才能接收并处理事件.我们称之为“响应者对象” UIApplication.UIViewController.UIView都继承自UIResponder,因此它们都是响应者对象,都能够接收并处理事件 2.UIResponder UIResponde

iOS开发UI篇—UIWindow简单介绍 - 文顶顶

一.简单介绍 UIWindow是一种特殊的UIView,通常在一个app中只会有一个UIWindow iOS程序启动完毕后,创建的第一个视图控件就是UIWindow,接着创建控制器的view,最后将控制器的view添加到UIWindow上,于是控制器的view就显示在屏幕上了 一个iOS程序之所以能显示到屏幕上,完全是因为它有UIWindow.也就说,没有UIWindow,就看不见任何UI界面 补充:UIWindow是创建的第一个视图控件(创建的第一个对象是UIapplication)如下图: