UIPopoverController 简单用法(全代码)
AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
UINavigationController *nav =[[UINavigationController alloc]initWithRootViewController:[[ViewController alloc]init]];
self.window.rootViewController =nav;
[self.window makeKeyAndVisible];
return YES;
}
ViewController.m
#import "ViewController.h"
#import "View2Controller.h"
@interface ViewController ()<UIPopoverControllerDelegate>
@property (nonatomic,strong) UIPopoverController *popoverButtonItem;
@property (nonatomic,strong) UIPopoverController *popoverButton;
@end
@implementation ViewController
//popoverButtonItem懒加载
-(UIPopoverController *) popoverButtonItem{
if (!_popoverButtonItem) {
UINavigationController *nav= [[UINavigationController alloc]initWithRootViewController: [[View2Controller alloc]init]];
_popoverButtonItem= [[UIPopoverController alloc] initWithContentViewController:nav];
_popoverButtonItem.delegate = self;
}
return _popoverButtonItem;
}
//popoverButton懒加载
-(UIPopoverController *) popoverButton{
if (!_popoverButton) {
_popoverButton= [[UIPopoverController alloc] initWithContentViewController:[[View2Controller alloc]init]];
_popoverButton.delegate = self;
}
return _popoverButton;
}
//1. 从BarButtonItem点击弹出
-(void) touchButtonItem:(UIBarButtonItem *)btn {
/**
* 从BarButtonItem上点击
* @param item:围绕着哪个UIBarButtonItem显示
* @param permittedArrowDirections:箭头指的方向
* @param animated:动画
*/
[self.popoverButtonItem presentPopoverFromBarButtonItem:btn permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
//2从界面上的某个按钮或者某片区域弹出popOver,排除navigationBar或者TabBar上的点击
-(void) touchButton:(UIButton *)btn {
/**
* 从界面上的某个按钮或者某片区域弹出popOver
* @param presentPopoverFromRect: 指定箭头所指区域的矩形框范围(位置和尺寸)
* @param inView: rect参数是以view的左上角为坐标原点(0,0)
* @param permittedArrowDirections:箭头指的方向
* @param animated:动画
*/
[self.popoverButton presentPopoverFromRect:btn.bounds
inView:btn
permittedArrowDirections:UIPopoverArrowDirectionLeft
animated:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor grayColor];
self.navigationItem.title = @"导航栏";
self.navigationItem.leftBarButtonItem =[[UIBarButtonItem alloc]initWithTitle:@"点我" style:UIBarButtonItemStyleDone target:self action:@selector(touchButtonItem:)];
//********************************************************************************
UIButton *btn =[[UIButton alloc]initWithFrame:CGRectMake(, , , )];
[btn setTitle:@"点我啊" forState:UIControlStateNormal];
[btn setTintColor:[UIColor blueColor]];
[btn setBackgroundColor:[UIColor redColor]];
[btn addTarget:self action:@selector(touchButton:) forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:btn];
}
// UIPopoverControllerDelegate --在ARC环境下正确的做法是保持popover的生命周期。让popover是strong类型的成员变量或属性。 当收到UIPopoverController dismiss的消息的时候将popover=nil;这样就可以正常便用了。
- (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController
{
self.popoverButton = nil;
self.popoverButtonItem = nil;
}
View2Controller.m
- (void)viewDidLoad
{
[super viewDidLoad];
// 设置控制器在popover中显示的尺寸 跟 view 一样
self.preferredContentSize = self.view.frame.size;
}
UIPopoverController 简单用法(全代码)的更多相关文章
- angularjs中ng-route和ui-router简单用法的代码比较
1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...
- 简单JS全选、反选代码
1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org ...
- listActivity和ExpandableListActivity的简单用法
http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...
- JS的简单用法
JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...
- slf4j的简单用法以及与log4j的区别
之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着研究一下slf4j的用法. 注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太 ...
- 13.Ext.extend用法以及代码解读
转自:http://www.blogjava.net/dragonshrimp/archive/2008/03/01/183060.html Ext.extend用法以及代码解读 概述 Ext.ext ...
- NSCharacterSet 简单用法
NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...
- [转]Valgrind简单用法
[转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...
- Ext.Net学习笔记19:Ext.Net FormPanel 简单用法
Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...
随机推荐
- laravel 二维码生成器包 QrCode 的使用
在laravel中使用 QrCode 生成二维码 https://laravelacademy.org/post/2605.html 我在本机的windows下composer require 没有成 ...
- Nginx 改变错误日志打印级别
Nginx 改变错误日志打印级别 user root;worker_processes 2; worker_rlimit_nofile 10240;error_log logs/nginx_err ...
- Java基础知识复习(一)
- JVM内存区域 程序计数器:一个比较小的内存区域,用于指示当前线程所执行的字节码执行到了第几行,是线程隔离的. Java虚拟机栈:Java方法执行的内存模型,用于存储局部变量,操作数栈,动态链接, ...
- 事务之四:Spring事务--原理
一.Spring事务的基本原理 Spring事务的本质其实就是数据库对事务的支持,没有数据库的事务支持,spring是无法提供事务功能的.对于纯JDBC操作数据库,想要用到事务,可以按照以下步骤进行: ...
- MySQL 5.6/5.7 linux常见安装(tar,yum,script)
该文章总结一下MySQL的常见安装方式,以tar,yum,script 三种方式来演示: 一般的公司都会有自己统一的数据库安装规范和模板,在生产环境请按照自己的规范来安装和使用,这里只演示和测试,供需 ...
- SDRAM 之时序收敛(学习了特权老师)
到现在我还是不太理解SDRAM的时序设置,但是可能蒙对了.(呵呵) 开发环境: quartus II 13.0 板子: DE2 EP2C35F672C6N 时序约束step 1:create cl ...
- C#中用SerialPort类中的Write()方法发送十六进制数
在C#中用SerialPort类中的Write()方法向串口发送十六进制数的方法: MSDN对SerialPort::Write()是这样解释的: 将数据写入串行端口输出缓冲区. 重载列表 名称 ...
- 系统环境变量PATH被删除后从注册表恢复
转自:https://wenku.baidu.com/view/75d0b6ec19e8b8f67c1cb958.html 首先需要了解path这个环境变量有什么用: 当你打开命令提示窗口时,即win ...
- latex中如何引用公式
在使用latex编辑文章时,经常会需要引用公式.图表等等. 如果我们人为地对这些公式.图表进行编号1-2-3-4,然后在文章中使用Eq(1)-Eq(2)-Eq(3)-Eq(4)去引用这些公式,固然是可 ...
- 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 2——逻辑回归
作业说明 Exercise 2,Week 3,使用Octave实现逻辑回归模型.数据集 ex2data1.txt ,ex2data2.txt 实现 Sigmoid .代价函数计算Computing ...