在开发中需要用户填写个人信息功能的功能模块里放置UITextField来提供用户输入。而为了提升用户体验,方便用户操作,规范输入内容或者根据业务服务区域等因素,往往需要在UITextField进入第一响应模式的时候弹出可供用户选择的UIPickerView。(也有部分使用Button来实现该效果,对于这类稍后会介绍)对于这种需求的实现,整理代码如下:
注:需要添加pickerView代理协议
-(void)creatPickerView{
UIPickerView * pickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, 0)];
pickerView.delegate = self;
pickerView.dataSource = self;
pickerView.showsSelectionIndicator = YES;
pickerView.backgroundColor = [UIColor whiteColor];
UIToolbar *toolBar = [[UIToolbar alloc]initWithFrame:CGRectMake(0, 0, WIDTH, 44)];
//设置toolBar的样式
//toolbar.barStyle = UIBarStyleDefault;
/***必要步骤****/
self.studyTextField.inputView = pickerView;
self.studyTextField.inputAccessoryView = toolbar;
//这个是toolBar上的确定按钮
UIBarButtonItem *doneButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTouched:)];
doneButton.title = @"确定";
//取消按钮
UIBarButtonItem *cancleButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancleTouched:)];
cancleButton.title = @"取消";
//将取消按钮,一个空白的填充item和一个确定按钮放入toolBar
[toolBar setItems:[NSArray arrayWithObjects:cancleButton,[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil],doneButton, nil]];
}
#pragma mark -toolBarBarItem的方法
-(void)doneTouched:(UIBarButtonItem *)sender{
//将textField的第一响应取消
[self.studyTextField resignFirstResponder];
}
-(void)cancleTouched:(UIBarButtonItem *)sender{
//将textField的第一响应取消
[self.studyTextField resignFirstResponder];
}
#pragma mark - pickerViewDelegate&dataSource
//返回picker有几列
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{
return 1;
}
//返回每列有几行
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component{
//数据源
return [self.pickerArray count];
}
//返回每行显示的内容
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
NSString *item = [self.pickerArray objectAtIndex:row];
return item;
}
//picker选取某一行执行的方法
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{
}