您的位置:首页 > 产品设计 > UI/UE

【iOS】点击UIButton,弹出UIPickerView

2014-12-18 16:38 239 查看
不需要讲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>

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: