UIPopoverController的使用

UIPopoverController的使用
2011-10-04 13:41

有些时候需要用到弹出窗口,这个时候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

原文地址:https://www.cnblogs.com/moonvan/p/2248162.html