zoukankan      html  css  js  c++  java
  • iOS开发UI篇—popoverController简单介绍

    iOS开发UI篇—popoverController简单介绍

    一、简单介绍

    1.什么是UIPopoverController

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

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

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

    2.使用步骤

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

    (1)设置内容控制器

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

     (2)设置内容的尺寸

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

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

    二、具体的步骤

    代码示例:

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

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

    YYMenuViewController.m文件

    复制代码
     1 //
     2 //  YYMenuViewController.m
     3 //  01-PopoverController简单介绍
     4 //
     5 //  Created by apple on 14-8-17.
     6 //  Copyright (c) 2014年 yangyong. All rights reserved.
     7 //
     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 //
     2 //  YYViewController.m
     3 //  01-PopoverController简单介绍
     4 //
     5 //  Created by apple on 14-8-17.
     6 //  Copyright (c) 2014年 yangyong. All rights reserved.
     7 //
     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,那么将会出现上面的错误。

     
     
  • 相关阅读:
    LC 155 Min Stack
    TUM 慕尼黑工业大学 MSEI 课程结构介绍 ws19/20
    C++ MinGW 配合 Sublime Text 搭建
    LC 752 Open the Lock
    LC 200 Number of Islands
    Python lambda
    关于无法连接网络安装VisualVM解决方案
    二叉堆的解读
    哈希表的实现
    红黑树解读
  • 原文地址:https://www.cnblogs.com/LiLihongqiang/p/5775094.html
Copyright © 2011-2022 走看看