4

我有两个文本字段,fromdate 和 todate。如何从同一个 datepicker 获取不同的日期。我尝试了一些方法,当日期更改时,最终在两个文本字段中获得了相同的日期。

-(IBAction)dateValueChanged:(id)sender
{
        UIDatePicker *picker = (UIDatePicker *)sender;
        NSDate *dateSelected1 = [picker date];
        NSDate *dateSelected2 = [picker date];

        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        [dateFormatter setDateFormat:@"dd-MM-yyyy"];
        self.fromTextField.text = [dateFormatter stringFromDate:dateSelected1];
       self.toTextField.text = [dateFormatter stringFromDate:dateSelected2];
}
4

3 回答 3

7

一种更优雅的方式可以在没有UITextFieldDelegate和的情况下实现这一点textFieldDidBeginEditing:

只需检查firstResponder

- (IBAction)dateValueChanged:(id)sender
{
    NSDate *dateSelected = [picker date];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];

    if ([firstTextField isFirstResponder])
    {
      firstTextField.text = [dateFormatter stringFromDate:dateSelected];
    }
    else if ([self.endTextField isFirstResponder])
    {
        secondTextField.text = [dateFormatter stringFromDate:dateSelected];
    }
}
于 2014-07-07T11:55:42.923 回答
4

您可以UITextFieldDelegate为您的 TextFieldstextFieldDidBeginEditing:方法实现协议以及为每个 TextField 设置tag属性,以便它们易于识别......

然后当textFieldDidBeginEditing:被调用时,您可以读取已开始编辑的文本字段的标签并将其设置为全局值,以便您可以找出日期选择器应该更改的文本字段。示例:

- (void)textFieldDidBeginEditing:(UITextField *)textField {

     someGlobalNSInteger = textField.tag; //the current text field tag is now globally set

}

-(IBAction)dateValueChanged:(id)sender {
    UIDatePicker *picker = (UIDatePicker *)sender;
    NSDate *dateSelected1 = [picker date];
    //NSDate *dateSelected1 = [picker date];

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"dd-MM-yyyy"];

    //self.fromTextField.text = [dateFormatter stringFromDate:dateSelected1];
    //self.toTextField.text = [dateFormatter stringFromDate:dateSelected2];

    UITextField *activeTextField = (UITextField*)[self viewWithTag:someGlobalNSInteger]; //gets text field what is currently being edited
    [activeTextField setText:[dateFormatter stringFromDate:dateSelected1]];

}

但是,如果您不允许文本字段可编辑(因此它无法启动键盘),您可能需要一些其他方法来确定哪些 textField 应该获得更新日期,但我将把它留给您。

希望能帮助到你

于 2012-05-03T10:52:49.690 回答
1

实现这一点的最佳方法是使用 UITextField 中可用的 inputview 属性。使用 Outlet 或编程初始化您的日期选择器一次,并将其分配为文本字段的委托方法“textFieldDidBeginEditing:”中的 inputView。对于分配日期,您可以在将输入视图实际分配给文本字段之前使用您自己的业务逻辑。

于 2012-05-03T12:23:33.550 回答