UIDatePicker和UIPickerView一起使用

直接贴图片和代码吧

点击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;
}


通过代码实现的功能  图片如下

  



猜你喜欢

转载自blog.csdn.net/lixianyue1991/article/details/72539998