zoukankan      html  css  js  c++  java
  • iOS- iPad里有趣的UIPopoverController

     

    效果:

     

    1.对UIPopoverController的简单概述                 

    1.1
    UIPopoverController是在iPad开发中常用的一个组件(在iPhone上不允许使用),使用非常简单
     
    1.2
    UIPopoverController也是一个控制器,跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController
     
    1.3
    它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面,(如上图所示)
     

    2.UIPopoverController实现                       

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

    2.2设置内容控制器                                         

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

    设置内容控制器有三种方法:

    - (id)initWithContentViewController:(UIViewController *)viewController;

    在初始化UIPopoverController的时候传入一个内容控制器

     

    @property (nonatomic, retain) UIViewController *contentViewController;

    通过@property设置内容控制器

     

    - (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated;

    animated可以指定设置内容控制器时要不要带有动画效果

    1 @interfaceQCLocationButton() <UIPopoverControllerDelegate>
    2 
    3 {
    4 
    5     UIPopoverController *_popover;
    6 
    7 }
     // 2.弹出popover(默认特性:点击popover之外的任何地方,popover都会隐藏)
        // 2.1.内容
        QCCityListViewController *cityList = [[QCCityListViewController alloc] init];
        
        // 2.2.将内容塞进popover中
        _popover = [[UIPopoverController alloc] initWithContentViewController:cityList];

    2.3设置内容的尺寸                                         

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

    设置内容的尺寸有两种方法:

    @property (nonatomic) CGSize popoverContentSize;

     

    - (void)setPopoverContentSize:(CGSize)size animated:(BOOL)animated;
     
     
    1  // 2.3.设置popover的内容尺寸
    2     _popover.popoverContentSize = CGSizeMake(320, 480);

    2.4设置显示的位置                                           

    从哪个地方冒出来

    设置显示的位置有两种方法:

    - (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;
    这个方法需要传入一个CGRecView的,也就是说CGRect以View的左上角为坐标原点(0, 0)
     
    这个CGRect的值是相对于这个第一种方法是:

    [pop presentPopoverFromRect:button.bounds inView:button permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

    (2)第二种方法是:

    [pop presentPopoverFromRect:button.frame inView:button.superview permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];

    - (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated;

    箭头会指向某一个UIBarButtonItem

    假如iPad的屏幕发生了旋转,UIPopoverController显示的位置可能会改变,那么就需要重写控制器的某个方法

    - (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

    在上面的方法中重写设置UIPopoverController显示的位置

    1     // 2.5.展示popover
    2     // self.bounds --- self
    3     // self.frame  --- self.superview
    4     [_popover presentPopoverFromRect:self.bounds inView:self permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

                                                                 清澈Saup  

  • 相关阅读:
    Oracle DBLink 使用情况
    asp.net里AjaxPro简单入门教程
    AjaxPro异步调用的超时设置
    ORA-01552: 非系统表空间 'USERS' 不能使用系统回退段的处理
    andoid 监听返回键退出
    WinForm调用user32.dll实现全屏
    C# Panel 打开 Form 窗口的方法
    Android获取日期及星期的方法
    WinForm 自定义对话框 获取返回值
    52. (待补) 实现对 无头单链表 的基本操作
  • 原文地址:https://www.cnblogs.com/qingche/p/3541409.html
Copyright © 2011-2022 走看看