• popoverController简单介绍


    popoverController简单介绍

    一、简单介绍

    1.什么是UIPopoverController

    是iPad开发中常见的一种控制器(在iPhone上不允许使用)

    跟其他控制器不一样的是,它直接继承自NSObject,并非继承自UIViewController

    它只占用部分屏幕空间来呈现信息,而且显示在屏幕的最前面

    2.使用步骤

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

    (1)设置内容控制器

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

     (2)设置内容的尺寸

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

    (3)显示,即从哪个地方冒出来

    二、具体的步骤

    代码示例:

    新建一个ipad项目,编写如下代码: 

    新建一个继承自UITableView的控制器,让其作为popoverController的内容控制器。

    YYMenuViewController.m文件

    复制代码
     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         _menus=@[@"列表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
     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,那么将会出现上面的错误。

     
  • 相关阅读:
    2018.4.26 lvm
    2018.4.25 github创建新项目
    2018.4.24 快排查找第K大
    2018.4.24 flask_mail使用
    SpringBoot中使用ES和MongoDB常用API
    设计模式-Template_Method模式
    设计模式-Chain of Responsibility模式
    设计模式-Observer模式
    设计模式-Adapter模式
    设计模式-Strategy模式
  • 原文地址:https://www.cnblogs.com/crash-wu/p/4797374.html
Copyright © 2020-2023  润新知