直接贴图片和代码吧
点击TextField 弹出PickerView
- (void)initDataPicker{
self.mToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, 40)];
self.mToolbar.barStyle = UIBarStyleDefault;
UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithTitle:@"完成" style:UIBarButtonItemStyleDone target:self action:@selector(doneAction:)];
UIBarButtonItem *fexible = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];
UIBarButtonItem *cancel = [[UIBarButtonItem alloc] initWithTitle:@"取消" style:UIBarButtonItemStyleDone target:self action:@selector(cancelAction:)];
self.mToolbar.items = [NSArray arrayWithObjects:cancel, fexible, done, nil];
self.mPickerView = [[UIPickerView alloc] init];
_mPickerView.dataSource = self;
_mPickerView.delegate = self;
_datePicker=[[UIDatePicker alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH , 200)];
_datePicker.datePickerMode = UIDatePickerModeDate;
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"zh_CN"];//设置为中文
_datePicker.locale = locale;
// NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
// NSDate *currentDate = [NSDate date];
// NSDateComponents *comps = [[NSDateComponents alloc] init];
// [comps setYear:10];//设置最大时间为:当前时间推后十年
// NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
// [comps setYear:-10];//设置最小时间为:当前时间前推十年
// NSDate *minDate = [calendar dateByAddingComponents:comps toDate:currentDate options:0];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setYear:0];//设置最大时间为:当前时间
NSDate *maxDate = [calendar dateByAddingComponents:comps toDate:[NSDate date] options:0];
_datePicker.maximumDate = maxDate;
}
- (void)getPickerDataWithArray:(NSArray *)arr{
self.pickerViewDataSource = arr;
[_mPickerView reloadComponent:0];
}
- (void)setPickViewWithField:(UITextField *)field{
if (field.tag == 1002 || field.tag == 1003) {
field.inputView = _mPickerView;
}else{
field.inputView = _datePicker;
}
field.inputAccessoryView = _mToolbar;
}
按下完成按钮跟取消按钮事件、选中的日期
/**
* 按下完成按钮
*/
- (void)doneAction:(id)sender
{
if (selectState == 1) {
((UITextField *)[self.view viewWithTag:1002]).text = _pickerViewDataSource[[self.mPickerView selectedRowInComponent:0]];
[(UITextField *)[self.view viewWithTag:1002] resignFirstResponder];
}else if(selectState == 0){
((UITextField *)[self.view viewWithTag:1003]).text = _pickerViewDataSource[[self.mPickerView selectedRowInComponent:0]];
[((UITextField *)[self.view viewWithTag:1003]) resignFirstResponder];
}else if (selectState == 2){
_startField.text = [self getData];
[_startField resignFirstResponder];
}else{
_endField.text = [self getData];
[_endField resignFirstResponder];
}
}
- (void)cancelAction:(id)sender
{
if (selectState == 1) {
[((UITextField *)[self.view viewWithTag:1002]) resignFirstResponder];
}else if(selectState == 0){
[((UITextField *)[self.view viewWithTag:1003]) resignFirstResponder];
}else if(selectState == 2){
[_startField resignFirstResponder];
}else if(selectState == 3){
[_endField resignFirstResponder];
}
}
#pragma mark 得到选择器的时间
- (NSString *)getData{
NSDate *date = [_datePicker date];
NSDateFormatter *dateformatter = [[NSDateFormatter alloc] init];
[dateformatter setDateFormat:@"YYYY-MM-dd"];
NSString * locationString =[dateformatter stringFromDate:date];
return locationString;
}
TextField代理 selectState是标识 是为了清楚是哪个pickview要选择数据源
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField{
if (textField.tag == 1002) {
selectState = 1;//标识
typeArray = @[@"商业用户",@"居民用户"];
[self setPickViewWithField:textField];
[self getPickerDataWithArray:typeArray];
}else if(textField.tag == 1003){
selectState = 0;//标识
stateArray = @[@"正常状态",@"休眠状态"];
[self setPickViewWithField:textField];
[self getPickerDataWithArray:stateArray];
}else if (textField == _startField){
selectState = 2;
[self setPickViewWithField:textField];
}else if (textField == _endField){
selectState = 3;
[self setPickViewWithField:textField];
}else{
[(UITextField *)[self.view viewWithTag:1002] resignFirstResponder];
[((UITextField *)[self.view viewWithTag:1003]) resignFirstResponder];
[_startField resignFirstResponder];
[_endField resignFirstResponder];
}
return YES;
}
pickerView代理
#pragma mark UIPikcer View Delgate
- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component
{
return SCREEN_WIDTH;
}
- (CGFloat)pickerView:(UIPickerView *)pickerView rowHeightForComponent:(NSInteger)component
{
return 40;
}
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
if (selectState) {
return typeArray[row];
}else
return stateArray[row];
}
#pragma mark -
#pragma mark UIPicker View DataSource
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
{
return 1;
}
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
return _pickerViewDataSource.count;
}
通过代码实现的功能 图片如下