【iOS】点击UIButton,弹出UIPickerView

来源:互联网 发布:培训4个月java能工作么 编辑:程序博客网 时间:2024/05/29 10:02

不需要讲UIPickerView 作为 subview :

做一个隐藏的 UITextField


ViewController.m
#import "ViewController.h"@interface ViewController ()@property (nonatomic, strong) UITextField *pickerViewTextField;@end@implementation ViewController@synthesize pickerViewTextField = _pickerViewTextField;- (void)viewDidLoad{    [super viewDidLoad];    // set the frame to zero    self.pickerViewTextField = [[UITextField alloc] initWithFrame:CGRectZero];    [self.view addSubview:self.pickerViewTextField];    UIPickerView *pickerView = [[UIPickerView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];    pickerView.showsSelectionIndicator = YES;    pickerView.dataSource = self;    pickerView.delegate = self;    // set change the inputView (default is keyboard) to UIPickerView    self.pickerViewTextField.inputView = pickerView;    // add a toolbar with Cancel & Done button    UIToolbar *toolBar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];    toolBar.barStyle = UIBarStyleBlackOpaque;    UIBarButtonItem *doneButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTouched:)];    UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancelTouched:)];    // the middle button is to make the Done button align to right    [toolBar setItems:[NSArray arrayWithObjects:cancelButton, [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil], doneButton, nil]];    self.pickerViewTextField.inputAccessoryView = toolBar;    ...}

监听 UIButton

ViewController.m
...- (IBAction)someButtonTouched:(UIButton *)sender{    [self.pickerViewTextField becomeFirstResponder];}

添加 bar buttons 方法

ViewController.m
- (void)cancelTouched:(UIBarButtonItem *)sender{    // hide the picker view    [self.pickerViewTextField resignFirstResponder];}- (void)doneTouched:(UIBarButtonItem *)sender{    // hide the picker view    [self.pickerViewTextField resignFirstResponder];    // perform some action}

添加代理 UIPickerView

ViewController.m
#pragma mark - UIPickerViewDataSource- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{    return 1;}- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{    return [yourItems count];}#pragma mark - UIPickerViewDelegate- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{    NSString *item = [yourItems objectAtIndex:row];    return item;}- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{    // perform some action}


ViewController.h
@interface ViewController : UIViewController <UIPickerViewDataSource, UIPickerViewDelegate>
0 0