iOS開發UI篇—popoverController簡單介紹
一、簡單介紹
1.什麼是UIPopoverController
是iPad開發中常見的一種控制器(在iPhone上不允許使用)
跟其他控制器不一樣的是,它直接繼承自NSObject,并非繼承自UIViewController
它隻占用部分螢幕空間來呈現資訊,而且顯示在螢幕的最前面

2.使用步驟
要想顯示一個UIPopoverController,需要經過下列步驟
(1)設定内容控制器
由于UIPopoverController直接繼承自NSObject,不具備可視化的能力。是以UIPopoverController上面的内容必須由另外一個繼承自UIViewController的控制器來提供,這個控制器稱為“内容控制器”
(2)設定内容的尺寸
顯示出來占據多少螢幕空間
(3)顯示,即從哪個地方冒出來
二、具體的步驟
代碼示例:
建立一個ipad項目,編寫如下代碼:
建立一個繼承自UITableView的控制器,讓其作為popoverController的内容控制器。
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,那麼将會出現上面的錯誤。