如何对多个UITextfields使用单个IOS UIDatePicker对象

如何对多个UITextfields使用单个IOS UIDatePicker对象,ios,objective-c,ios7,uidatepicker,Ios,Objective C,Ios7,Uidatepicker,我有以下三个与UIDatePicker关联的UITextField self.taskDate.inputView=[self returnDatePickerView:01]; self.taskStartTime.inputView=[self returnDatePickerView:02]; self.taskEndtime.inputView=[self returnDatePickerView:03]; 这是我的日期选择器方法 - (UIView *)returnDateP

我有以下三个与UIDatePicker关联的UITextField

self.taskDate.inputView=[self returnDatePickerView:01];
self.taskStartTime.inputView=[self returnDatePickerView:02];
self.taskEndtime.inputView=[self returnDatePickerView:03];
这是我的日期选择器方法

    - (UIView *)returnDatePickerView:(int)tag{
    UIToolbar *toolBar1 = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    toolBar1.barStyle = UIBarStyleBlackTranslucent;
    UIBarButtonItem *doneButton3 = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                    style:UIBarButtonItemStyleBordered
                                                                   target:self
                                                                   action:@selector(taskDateDone)];
    [toolBar1 setItems:[NSArray arrayWithObjects:doneButton3, nil]];
    UIView *dateView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
    datePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
    if(tag==01){
    datePicker.datePickerMode=UIDatePickerModeDate;
    }else{
    datePicker.datePickerMode=UIDatePickerModeTime;
    }
    //Setting user selected date as the date picker default
    [datePicker setDate:taskDate animated:YES];
    [datePicker addTarget:self action:@selector(taskDatePicked:)forControlEvents:UIControlEventValueChanged];
    [dateView addSubview:datePicker];
    [dateView addSubview:toolBar1];
    return dateView;
 }
这是我的回电任务

- (void)taskDatePicked:(id)sender
{
NSDateFormatter *systemtimeFormatter = [[NSDateFormatter alloc] init];
NSLog(@"tag %ld",textFieldTag);
//[systemtimeFormatter setTimeZone:[NSTimeZone systemTimeZone]];
if(textFieldTag==01){
     taskDate = datePicker.date;
    [systemtimeFormatter setDateStyle:NSDateFormatterShortStyle];
    self.taskDate.text=[[NSString alloc] initWithString:[systemtimeFormatter stringFromDate:taskDate]];
}else if(textFieldTag==02){
     taskStartTime = datePicker.date;
    [systemtimeFormatter setTimeStyle:NSDateFormatterShortStyle];
    self.taskStartTime.text=[[NSString alloc] initWithString:[systemtimeFormatter stringFromDate:taskStartTime]];
     NSLog(@"taskStartTime picked date %@",taskStartTime.description);
}else if(textFieldTag==03){
    taskEndTime = datePicker.date;
    [systemtimeFormatter setTimeStyle:NSDateFormatterShortStyle];
    self.taskEndtime.text=[[NSString alloc] initWithString:[systemtimeFormatter stringFromDate:taskEndTime]];
}
[datePicker reloadInputViews];
}
但此方法并不是对所有UITextFied都调用。
我在这里做错了什么。请建议

请将标记值设置为textFieldTag

- (UIView *)returnDatePickerView:(int)tag{
    UIToolbar *toolBar1 = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
    toolBar1.barStyle = UIBarStyleBlackTranslucent;
    UIBarButtonItem *doneButton3 = [[UIBarButtonItem alloc] initWithTitle:@"Done"
                                                                    style:UIBarButtonItemStyleBordered
                                                                   target:self
                                                                   action:@selector(taskDateDone)];
    [toolBar1 setItems:[NSArray arrayWithObjects:doneButton3, nil]];
    UIView *dateView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, 200)];
    datePicker = [[UIDatePicker alloc] initWithFrame:pickerFrame];
    if(tag==01){
    datePicker.datePickerMode=UIDatePickerModeDate;
    }else{
    datePicker.datePickerMode=UIDatePickerModeTime;
    }
    //Setting user selected date as the date picker default
    [datePicker setDate:taskDate animated:YES];
    [datePicker addTarget:self action:@selector(taskDatePicked:)forControlEvents:UIControlEventValueChanged];
     textFieldTag = tag;
    [dateView addSubview:datePicker];
    [dateView addSubview:toolBar1];
    return dateView;
    }

请尝试以下代码,将单个日期选择器用作具有不同日期/时间格式的多个文本字段的输入视图

此处,文本字段的输入视图在文本字段委托中指定

-(BOOL)textField应该开始编辑:(UITextField*)textField

考虑
UIDatePicker*datePicker
是常用的日期选择器和
NSInteger textFieldTag保存当前文本字段的标记(两者都添加在接口扩展中)

确保为文本字段指定了标记值,并为每个字段连接了委托。然后在
viewDidLoad
方法中添加以下内容

datePicker = [[UIDatePicker alloc] init];
[datePicker addTarget:self action:@selector(taskDatePicked:) forControlEvents:UIControlEventValueChanged];
添加文本字段,如下所示:

- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
    switch (textField.tag)
    {
        case 1:
            datePicker.datePickerMode = UIDatePickerModeDate;
            break;
        case 2:
            datePicker.datePickerMode = UIDatePickerModeTime;
            break;
        case 3:
            datePicker.datePickerMode = UIDatePickerModeTime;
            break;
        default:
            break;
    }
    textField.inputView = datePicker;
    textFieldTag = textField.tag;
    return YES;
}
日期选择器更改触发的事件如下所示:

- (void)taskDatePicked:(id)sender
{

    UITextField *textField = (UITextField *)[self.view viewWithTag:textFieldTag];
    NSDateFormatter *dateformatter = [[NSDateFormatter alloc]init];
    dateformatter.dateStyle        = NSDateFormatterMediumStyle;
    switch (textFieldTag)
    {
        case 1:
            [dateformatter setDateFormat:@"dd-MM-YYYY"];
            break;
        case 2:
            [dateformatter setDateFormat:@"hh:mm a"];
            break;
        case 3:
            [dateformatter setDateFormat:@"hh:mm a"];
            break;
        default:
            break;
    }
    textField.text = [dateformatter stringFromDate:[datePicker date]];
}