【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