有些时候需要用到弹出窗口,这个时候UIPopoverController就有用武之地了,下面介绍一个使用UIPopoverController的示例,以供参考。实现效果如下:
为了实现这一效果并使用UIPopoverController,这里搞了两个controller,具体定义如下。
// Created by Chelsea Wang 4209898762 on 11-10-4.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
#import <UIKit/UIKit.h>
@interface UIActionSheetDemoViewController : UIViewController<UIPopoverControllerDelegate>{
UIPopoverController* _popover;
}
// UIActionSheetDemoViewController.m
// UIActionSheetDemo
//
// Created by Chelsea Wang 4209898762 on 11-10-4.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#import "UIActionSheetDemoViewController.h"
#import "popController.h"
@implementation UIActionSheetDemoViewController
@synthesize popover = _popover;
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad
{
[super viewDidLoad];
UISegmentedControl* settingView = [[UISegmentedControl alloc] initWithItems:[NSArrayarrayWithObjects:@"FootballCF",@"BasketballCF",nil]];
[settingView setSegmentedControlStyle:UISegmentedControlStyleBar];
[settingView setFrame:CGRectMake(500, 900, 160, 75)];
[settingView setNeedsLayout];
[settingView addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:settingView];
[settingView release];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
if (self.popover != nil) {
[self.popover release];
self.popover = nil;
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}
-(void)segmentAction:(UISegmentedControl*)seg{
//清除已经显示的弹出窗口
if (self.popover.popoverVisible) {
[self.popover dismissPopoverAnimated:YES];
}
//初始化待显示控制器
popController* controller = [[popController alloc] init];
//设置待显示控制器的范围
[controller.view setFrame:CGRectMake(550, 490, 350, 450)];
//设置待显示控制器视图的尺寸
controller.contentSizeForViewInPopover = CGSizeMake(350, 450);
//初始化弹出窗口
UIPopoverController* pop = [[UIPopoverController alloc] initWithContentViewController:controller];
controller.popover = pop;
self.popover = pop;
self.popover.delegate = self;
//设置弹出窗口尺寸
self.popover.popoverContentSize = CGSizeMake(350, 450);
//显示,其中坐标为箭头的坐标以及尺寸
[self.popover presentPopoverFromRect:CGRectMake(550, 890, 10, 10) inView:self.viewpermittedArrowDirections:UIPopoverArrowDirectionDown animated:NO];
[controller release];
[pop release];
//[self.popover dismissPopoverAnimated:YES];
}
-(void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverController{
NSLog(@"popover dismiss");
}
@end
//
// popController.h
// UIActionSheetDemo
//
// Created by Chelsea Wang 4209898762 on 11-10-4.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface popController : UIViewController<UIPickerViewDelegate,UIPickerViewDataSource>{
UIPopoverController* _popover;
BOOL isChelsea;
}
@property(nonatomic,retain)UIPopoverController* popover;
@end
// popController.m
// UIActionSheetDemo
//
// Created by Chelsea Wang 4209898762 on 11-10-4.
// Copyright 2011年 __MyCompanyName__. All rights reserved.
//
#import "popController.h"
@implementation popController
@synthesize popover = _popover;
//定义选项显示内容
const char* chelsea[12] = {"博阿斯","切赫","阿什利科尔","特里","路易斯","伊万诺维奇","兰帕德","拉米雷斯","梅来雷斯","阿内尔卡","德罗巴","托雷斯"};
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)didReceiveMemoryWarning
{
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
#pragma mark - View lifecycle
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
isChelsea = NO;
//添加完成按钮
UISegmentedControl* doneButton = [[UISegmentedControl alloc] initWithItems:[NSArrayarrayWithObjects:@"Done", nil]];
[doneButton setSegmentedControlStyle:UISegmentedControlStyleBar];
[doneButton setFrame:CGRectMake(self.view.bounds.origin.x+self.view.bounds.size.width-100,self.view.bounds.origin.y+5, 75, 50)];
[doneButton addTarget:self action:@selector(segmentAction:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:doneButton];
[doneButton release];
//添加选择项
UISegmentedControl* clubSeg = [[UISegmentedControl alloc] initWithItems:[NSArrayarrayWithObjects:@"Chelsea",@"AC Milan",@"Livupoor",@"Asenal",nil]];
[clubSeg setSegmentedControlStyle:UISegmentedControlStyleBar];
[clubSeg setFrame:CGRectMake(self.view.bounds.origin.x,self.view.bounds.origin.y+75,self.view.bounds.size.width,50)];
[clubSeg addTarget:self action:@selector(chooseClub:) forControlEvents:UIControlEventValueChanged];
[self.view addSubview:clubSeg];
[clubSeg release];
//添加选择列表
UIPickerView* picker = [[UIPickerView alloc] initWithFrame:CGRectMake(self.view.bounds.origin.x,self.view.bounds.origin.y+150, self.view.bounds.size.width,self.view.bounds.size.height)];
[picker setBounds:CGRectMake(self.view.bounds.origin.x, self.view.bounds.origin.y+75,self.view.bounds.size.width,self.view.bounds.size.height)];
picker.delegate = self;
picker.dataSource = self;
picker.showsSelectionIndicator = YES;
[self.view addSubview:picker];
[picker setTag:101];
[picker release];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
if (self.popover != nil) {
[self.popover release];
self.popover = nil;
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
return YES;
}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1;
}
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
return 12;
}
-(NSString*)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if (isChelsea) {
return [NSString stringWithCString:chelsea[row] encoding:NSUTF8StringEncoding];
}else{
return [NSString stringWithFormat:@"chelsea_%d",arc4random()%12];
;
}
}
-(void)segmentAction:(UISegmentedControl*)seg{
[self.view removeFromSuperview];
[self.popover dismissPopoverAnimated:YES];
}
-(void)chooseClub:(UISegmentedControl*)seg{
NSInteger index = seg.selectedSegmentIndex;
UIPickerView* picker = (UIPickerView*)[self.view viewWithTag:101];
switch (index) {
case 0:{
NSLog(@"you choose Chelsea");
isChelsea = YES;
[picker reloadAllComponents];
break;
}
case 1:
NSLog(@"you choose AC Milan");
isChelsea = NO;
[picker reloadAllComponents];
case 2:
NSLog(@"you choose Livopoor");
isChelsea = NO;
[picker reloadAllComponents];
case 3:
NSLog(@"you choose Asenal");
isChelsea = NO;
[picker reloadAllComponents];
default:
break;
}
}
@end
@property(nonatomic,retain)UIPopoverController* popover;
@end