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 简单用法(全代码)的更多相关文章

  1. angularjs中ng-route和ui-router简单用法的代码比较

    1.使用ng-route: app.js中的写法: var app=angular.module('birthdayApp',['ngRoute']); app.config(function($ro ...

  2. 简单JS全选、反选代码

    1<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org ...

  3. listActivity和ExpandableListActivity的简单用法

    http://www.cnblogs.com/limingblogs/archive/2011/10/09/2204866.html 今天自己简单的总结了listActivity和Expandable ...

  4. JS的简单用法

    JS的简单用法 参考:http://www.w3school.com.cn/js/js_switch.asp JavaScript 是网络的脚本语言 JavaScript 是可插入 HTML 页面的编 ...

  5. slf4j的简单用法以及与log4j的区别

    之前在项目中用的日志记录器都是log4j的日志记录器,可是到了新公司发现都是slf4j,于是想着研究一下slf4j的用法. 注意:每次引入Logger的时候注意引入的jar包,因为有Logger的包太 ...

  6. 13.Ext.extend用法以及代码解读

    转自:http://www.blogjava.net/dragonshrimp/archive/2008/03/01/183060.html Ext.extend用法以及代码解读 概述 Ext.ext ...

  7. NSCharacterSet 简单用法

    NSCharacterSet 简单用法 NSCharacterSet其实是许多字符或者数字或者符号的组合,在网络处理的时候会用到 NSMutableCharacterSet *base = [NSMu ...

  8. [转]Valgrind简单用法

    [转]Valgrind简单用法 http://www.cnblogs.com/sunyubo/archive/2010/05/05/2282170.html Valgrind的主要作者Julian S ...

  9. Ext.Net学习笔记19:Ext.Net FormPanel 简单用法

    Ext.Net学习笔记19:Ext.Net FormPanel 简单用法 FormPanel是一个常用的控件,Ext.Net中的FormPanel控件同样具有非常丰富的功能,在接下来的笔记中我们将一起 ...

随机推荐

  1. 调试VBA程序常用方法

    在中断模式下(ctrl+Break键),可以做: 1.执行    工具----选项----编辑器----勾选“自动显示数据提示” 则当用鼠标悬停在变量或表达式上时,会出现提示窗口,显示其名称和值! 2 ...

  2. oracle驱动包maven下载失败解决

    oracle是付费的,因此jar包也不是随便让人下的,这就给maven的下载和编译带来了麻烦,因为我们没法从maven仓库直接拿来用.解决办法就是先从别的地方获取jar包,再放到本地仓库里去,这样运行 ...

  3. Linux LED字符设备驱动

    // 申请IO资源 int gpio_request(unsigned gpio, const char *label); // 释放IO资源 void gpio_free(unsigned gpio ...

  4. 字符串长度(PHP学习)

    1.计算字符串长度有哪些方法? 答:strlen()   和  mb_strlen() 2.两者有什么区别 答: 如下代码 <?php $str = 'hello中国'; ?> strle ...

  5. mysql实战优化之三:表优化

    对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈.所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问. 如果一个表只会有几列罢了(比如说字典表,配置表),那么,我们就没有理 ...

  6. spring bean id重复覆盖的问题解决

    问题: 当我们的web应用做成一个大项目之后,里面有很多的bean配置,如果两个bean的配置id是一样的而且实现类也是一样的,例如有下面两份xml的配置文档: beancontext1.xml &l ...

  7. C++面试题(三)

    1 什么是函数对象?有什么作用? 函数对象却具有许多函数指针不具有的有点,函数对象使程序设计更加灵活,而且能够实现函数的内联(inline)调用,使整个程序实现性能加速. 函数对象:这里已经说明了这是 ...

  8. niosII SDRAM ,FLASH (学习特权)

    环境: quartus v13.0  64位. DE2 cycloneII EP2C35F672C6N (学校的开发板,还是想同学借的呵呵) 主要实现flash的烧录,虽然实现了但是还是有很多运气的成 ...

  9. 简单的方法实现仿微信底部的Tab选项卡界面

    在网上看了比较多的关于Tab的教程,发现都很杂乱.比较多的用法是用TitlePagerTabStrip和ViewPaper.不过TitlePagerTabStrip有个很大的缺陷,Tab里面的内容刚进 ...

  10. [原创]Java项目统一UTC时间方案

    Java项目统一UTC时间方案 作者:Gods_巨蚁 引言 近期团队的个别项目在进行框架升级后,部分时间值存在8小时误差,原因是错误的将数据库中的时间数据理解成了UTC时间(旧版本认为是北京时间) 考 ...