UIPopoverController的使用

简介:

复制代码
  1 实现如下:
2 首先加入委托:UIPopoverControllerDelegate
3 先创建一个popover和实例化tableview的类(该类的xib文件中,view中就放了一个tablview):
4 UIPopoverController *popover;
5 popTableViewController *popoverContent;
6
7 在CustomerDetailVC.m放入:
8 #import "CustomerDetailVC.h"
9 #import "popTableViewController.h"
10 @implementation CustomerDetailVC
11 //点击Country后面按钮的时候,弹出popover:
12 -(IBAction)btnPressed:(id)sender
13 {
14 popoverContent.oceanaViewController = self;
15
16 popover = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
17 [popover setPopoverContentSize:CGSizeMake(330,330)];
18 popoverContent.contentSizeForViewInPopover=popoverContent.view.bounds.size;
19 popoverContent.popoverController = popover;
20 [popover presentPopoverFromRect:((UIView *)sender).frame
21 inView:self.view
22 permittedArrowDirections:UIPopoverArrowDirectionAny
23 animated:YES];
24 [popoverContent release]; //在这里popoverContent的retainCount =4;
25 [popoverContent.myArray release];
26 }
27 - (void)popoverControllerDidDismissPopover:(UIPopoverController*)popoverController{
28 if (popover) {
29 [popover dismissPopoverAnimated:YES];
30 [popover release];
31 popover=nil;
32 if (popoverContent != nil) {
33 [popoverContent release];
34 popoverContent = nil;
35 }
36 }
37 }
38 //closing popover
39 -(void)killPopoversOnSight {
40 if (popover) {
41 [popover dismissPopoverAnimated:NO];
42 }
43 }
44 在popTableViewController.h文件中:
45 #import "CustomerDetailVC.h"
46 @class CustomerDetailVC;
47 @interface popTableViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> {
48 IBOutlet UITableView *myTableView;
49 NSMutableArray *myArray;
50 UIPopoverController *popoverController;
51 CustomerDetailVC *oceanaViewController;
52 NSString *selectStr;
53
54 }
55
56 @property (nonatomic,retain) UITableView *myTableView;
57 @property (nonatomic,retain) NSMutableArray *myArray;
58 @property (nonatomic,retain) UIPopoverController *popoverController;
59 @property (nonatomic,retain) NSString *selectStr;
60 @property (nonatomic,assign) CustomerDetailVC *oceanaViewController;
61 实现文件中:
62 #import "popTableViewController.h"
63 @implementation popTableViewController
64 @synthesize myTableView;
65 @synthesize selectStr;
66 @synthesize myArray;
67 @synthesize popoverController;
68 @synthesize oceanaViewController;
69
70
71 -(void)viewDidLoad
72 {
73 [myTableView setDelegate:self];
74 [myTableView setDataSource:self];
75 }
76 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
77 return @"Name";
78 }
79 //指定有多少个分区(Section),默认为1
80 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
81 return 1;
82 }
83
84 //指定每个分区中有多少行,默认为1
85 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
86 return [myArray count];
87 }
88 //绘制Cell
89 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
90
91 static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
92 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
93 if (cell == nil) {
94 cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SimpleTableIdentifier] autorelease];
95 }
96 cell.textLabel.text =[myArray objectAtIndex:indexPath.row];
97 return cell;
98 }
99 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
100 selectStr =[[NSString alloc] initWithFormat:@"%@",[myArray objectAtIndex:indexPath.row]];
101 [oceanaViewController killPopoversOnSight];
102 [oceanaViewController textGetValue:selectStr]; //CustomerDetailVC中的一个方法
103 [selectStr release];
104 }
复制代码

////////////////

UIPopoverController只能在ipad设备上面使用;作用是用于显示临时内容,特点是总是显示在当前视图最前端,当单击界面的其他地方时自动消失。

复制代码
 1 UIViewController* vCtrl = [[UIViewController alloc] init];
2 UIPopoverController* popController = [[UIPopoverController alloc] initWithContentViewController:vCtrl];
3
4 popController.popoverContentSize = CGSizeMake(320,480);
5 CGrect rect = CGRectMake(0,0,2,2);
6
7 [popController presentPopoverFromRect:rect
8 inView:aView
9 permittedArrowDirections:UIPopoverArrowDirectionUp
10 animated:YES];
复制代码



在使用该控制器的时候,下面几个步骤是必须的:
1.UIPopoverController该控制器的内容必须由一个控制器提供;提供方式有三:

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

2.设置箭头方向:
@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection

3.设置内容大小:
@property (nonatomic) CGSize popoverContentSize

备注:
<1>.如果从一个导航按钮处呈现,使用:
presentPopoverFromBarButtonItem:permittedArrowDirections:animated:;
如果要从一个视图出呈现,使用:
presentPopoverFromRect:inView:permittedArrowDirections:animated:

<2>.如果设备旋转以后,位置定位错误需要在父视图控制器的下面方法里面重新定位:
didRotateFromInterfaceOrientation:(在这个方法体里面重新设置rect)
然后再次调用:
- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated

本文转自编程小翁博客园博客,原文链接:http://www.cnblogs.com/wengzilin/archive/2012/03/13/2393675.html,如需转载请自行联系原作者

相关文章
|
11月前
|
运维 网络协议 Linux
运维之道:从新手到高手的进阶之路
【10月更文挑战第22天】 在当今这个信息化快速发展的时代,运维工程师作为保障系统稳定运行的幕后英雄,其角色日益重要。本文旨在通过分享个人成长经历与实践经验,为那些渴望在运维领域内不断进步、追求卓越的同行们提供一份指南。我们将探索如何从一名对运维充满好奇但缺乏经验的新手,逐步成长为能够独当一面、解决复杂问题的技术高手。无论你是刚踏入这个行业的新人,还是已经在这条路上走了一段距离的朋友,相信这篇文章都能给你带来一些启发和帮助。
194 2
|
SQL 缓存 Java
实时计算 Flink版产品使用合集之flink-connector-mysql-cdc 和 flink-connector-sqlserver-cdc 这两个CDC连接器只能选择其中一个使用吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
469 0
|
JavaScript Java 测试技术
基于springboot+vue.js+uniapp小程序的校园生活服务平台附带文章源码部署视频讲解等
基于springboot+vue.js+uniapp小程序的校园生活服务平台附带文章源码部署视频讲解等
168 9
|
Linux
关于ZooKeeper在Linux端启动失败的问题解决方案
关于ZooKeeper在Linux端启动失败的问题解决方案
737 0
关于ZooKeeper在Linux端启动失败的问题解决方案
|
人工智能 弹性计算 Cloud Native
Docker镜像管理
学习分享版
548 0
|
Web App开发 弹性计算
ECS 8080端口连接拒绝问题排查
如果遇到ECS部署的web服务无法访问,可以参考这个case进行排查
16625 7
|
弹性计算 关系型数据库 MySQL
在 CentOS7 上手动部署LNMP环境
Nginx是一款小巧而高效的Web服务器软件,可帮您在Linux系统下快速方便地搭建出LNMP Web服务环境。本文将为大家介绍如何手动在 CentOS7 的 ECS实例上搭建LNMP环境,其中LNMP分别代表Linux、Nginx、MySQL和PHP。
2039 0
在 CentOS7 上手动部署LNMP环境
|
缓存 监控 关系型数据库
DAS 解决延时突高的案例分享
DAS 是信也科技自研的数据库访问框架。它包括数据库控制台 das console,数据库客户端 das client 和数据库服务端 das server 三部分。DAS 是基于 Java 语言开发的,支持数据库管理,ORM,SQL 创建,分库分表操作的一体化数据库访问解决方案。
|
分布式计算 Hadoop Scala
Spark2.2.0 分布式离线搭建
Spark2.2.0 分布式离线搭建
2756 0
|
Web App开发 JavaScript 前端开发