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,那么將會出現上面的錯誤。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM