UIPopoverController的使用


  1 實現如下:
2 首先加入委托:UIPopoverControllerDelegate
3 先創建一個popover和實例化tableview的類(該類的xib文件中,view中就放了一個tablview):
4 UIPopoverController *popover;
5 popTableViewController *popoverContent;
6
7 在CustomerDetailVC.m放入:
8 #import "CustomerDetailVC.h"
9 #import "popTableViewController.h"
10 @implementation CustomerDetailVC
11 //點擊Country后面按鈕的時候,彈出popover:
12 -(IBAction)btnPressed:(id)sender
13 {
14 popoverContent.oceanaViewController = self;
15
16 popover = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
17 [popover setPopoverContentSize:CGSizeMake(330,330)];
18 popoverContent.contentSizeForViewInPopover=popoverContent.view.bounds.size;
19 popoverContent.popoverController = popover;
20 [popover presentPopoverFromRect:((UIView *)sender).frame
21 inView:self.view
22 permittedArrowDirections:UIPopoverArrowDirectionAny
23 animated:YES];
24 [popoverContent release]; //在這里popoverContent的retainCount =4;
25 [popoverContent.myArray release];
26 }
27 - (void)popoverControllerDidDismissPopover:(UIPopoverController*)popoverController{
28 if (popover) {
29 [popover dismissPopoverAnimated:YES];
30 [popover release];
31 popover=nil;
32 if (popoverContent != nil) {
33 [popoverContent release];
34 popoverContent = nil;
35 }
36 }
37 }
38 //closing popover
39 -(void)killPopoversOnSight {
40 if (popover) {
41 [popover dismissPopoverAnimated:NO];
42 }
43 }
44 在popTableViewController.h文件中:
45 #import "CustomerDetailVC.h"
46 @class CustomerDetailVC;
47 @interface popTableViewController : UIViewController<UITableViewDelegate,UITableViewDataSource> {
48 IBOutlet UITableView *myTableView;
49 NSMutableArray *myArray;
50 UIPopoverController *popoverController;
51 CustomerDetailVC *oceanaViewController;
52 NSString *selectStr;
53
54 }
55
56 @property (nonatomic,retain) UITableView *myTableView;
57 @property (nonatomic,retain) NSMutableArray *myArray;
58 @property (nonatomic,retain) UIPopoverController *popoverController;
59 @property (nonatomic,retain) NSString *selectStr;
60 @property (nonatomic,assign) CustomerDetailVC *oceanaViewController;
61 實現文件中:
62 #import "popTableViewController.h"
63 @implementation popTableViewController
64 @synthesize myTableView;
65 @synthesize selectStr;
66 @synthesize myArray;
67 @synthesize popoverController;
68 @synthesize oceanaViewController;
69
70
71 -(void)viewDidLoad
72 {
73 [myTableView setDelegate:self];
74 [myTableView setDataSource:self];
75 }
76 - (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section{
77 return @"Name";
78 }
79 //指定有多少個分區(Section),默認為1
80 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
81 return 1;
82 }
83
84 //指定每個分區中有多少行,默認為1
85 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
86 return [myArray count];
87 }
88 //繪制Cell
89 -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
90
91 static NSString *SimpleTableIdentifier = @"SimpleTableIdentifier";
92 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:SimpleTableIdentifier];
93 if (cell == nil) {
94 cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:SimpleTableIdentifier] autorelease];
95 }
96 cell.textLabel.text =[myArray objectAtIndex:indexPath.row];
97 return cell;
98 }
99 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
100 selectStr =[[NSString alloc] initWithFormat:@"%@",[myArray objectAtIndex:indexPath.row]];
101 [oceanaViewController killPopoversOnSight];
102 [oceanaViewController textGetValue:selectStr]; //CustomerDetailVC中的一個方法
103 [selectStr release];
104 }

////////////////

UIPopoverController只能在ipad設備上面使用;作用是用於顯示臨時內容,特點是總是顯示在當前視圖最前端,當單擊界面的其他地方時自動消失。

 1 UIViewController* vCtrl = [[UIViewController alloc] init];
2 UIPopoverController* popController = [[UIPopoverController alloc] initWithContentViewController:vCtrl];
3
4 popController.popoverContentSize = CGSizeMake(320,480);
5 CGrect rect = CGRectMake(0,0,2,2);
6
7 [popController presentPopoverFromRect:rect
8 inView:aView
9 permittedArrowDirections:UIPopoverArrowDirectionUp
10 animated:YES];



在使用該控制器的時候,下面幾個步驟是必須的:
1.UIPopoverController該控制器的內容必須由一個控制器提供;提供方式有三:

  • - (id)initWithContentViewController:(UIViewController *)viewController
  • @property (nonatomic, retain) UIViewController *contentViewController
  • - (void)setContentViewController:(UIViewController *)viewController animated:(BOOL)animated

2.設置箭頭方向:
@property (nonatomic, readonly) UIPopoverArrowDirection popoverArrowDirection

3.設置內容大小:
@property (nonatomic) CGSize popoverContentSize

備注:
<1>.如果從一個導航按鈕處呈現,使用:
presentPopoverFromBarButtonItem:permittedArrowDirections:animated:;
如果要從一個視圖出呈現,使用:
presentPopoverFromRect:inView:permittedArrowDirections:animated:

<2>.如果設備旋轉以后,位置定位錯誤需要在父視圖控制器的下面方法里面重新定位:
didRotateFromInterfaceOrientation:(在這個方法體里面重新設置rect)
然后再次調用:
- (void)presentPopoverFromRect:(CGRect)rect inView:(UIView *)view permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections animated:(BOOL)animated




免責聲明!

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



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