【问题标题】:UIDatePicker Selected value is wrong in case UIDatePicker was not scrolled如果 UIDatePicker 未滚动,则 UIDatePicker 选择的值错误
【发布时间】:2012-08-24 06:32:48
【问题描述】:

我正在制作一个 iPhone 应用程序,我在其中使用 UIDatePicker 并在操作表中显示选定的时间。在操作表中,时间以 10 分钟间隔显示。

textfield 值在我滚动 Datepicker 时设置正确

如果我滚动操作表然后直接单击选择按钮然后文本字段设置当前时间 (11:56) 但我在操作表中选择(11:50)时间。 (textfield) 显示的值不正确。

如何设置textfield 的值(11:50)。给我一些解决方案。

【问题讨论】:

  • nslog 您选择的值,即 youdatepicker.date
  • 如果我不滚动则选择 [12:30] 和 nslog 12:37 .... 如果我滚动则 [选择 12:30] .. nslog 12:30

标签: iphone objective-c uidatepicker


【解决方案1】:

按下选择按钮后,只需从日期选择器中设置 dateSelected....

NSDate *date = datePicker.date;
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"dd/MM/yyyy"];    
NSString *dateString = [formatter stringFromDate:date];
yourTxtField.text = dateString;

【讨论】:

    【解决方案2】:

    编辑 让你的类在你的选择器中处理 UIControlEventValueChanged 事件。添加此行 ViewDidLoad 方法或显示您的操作表时:

      [picker addTarget:self action:@selector(dateChanged:) 
              forControlEvents:UIControlEventValueChanged];
    

    现在选择器会在日期改变时被调用

    更新

    - (void) dateChanged:(id)sender{
        // handle date changes and set in textField
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
        NSString *strdate = [dateFormatter stringFromDate:self.datePicker.date]; //provide your selected date here
        self.dateTexField.text = strdate;
    }
    

    如果没有调用上述方法,则表示日期未更改,因此请始终在您的文本字段中设置默认日期。


    将日期转换为字符串对象

    更新

     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
     NSString *strdate = [dateFormatter stringFromDate:self.datePicker.date]; //provide your selected date here
    

    现在像这样为 textField 设置值:

      self.dateTextField.text = strdate;
    

    【讨论】:

    • 我这样做..当我滚动时这将正常工作。但不是在我直接点击选择按钮的情况下
    【解决方案3】:

    我认为最简单的方法是将带有完成按钮的工具栏附加到以 UIDatePicker 作为其 inputView 的 TextField。通过在 TextViewDidBeginEditing 中维护对它的引用来跟踪当前的 TextField。然后在完成按钮中执行以下操作:

    if (_currentTextField == _myTextFieldThatUsesADatePicker) {
        self.myDateProperty = _myDatePicker.date;
    }
    

    【讨论】:

      【解决方案4】:

      我不知道这种方式是否正确,但它对我有用

      -(void)selectedTime{
          NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
      //    [outputFormatter setDateFormat:@"h:mm a"];
          [outputFormatter setDateFormat:@"HH:mm:ss"];
          selectedTime = [outputFormatter stringFromDate:datePicker.date];
          NSArray *temp=[selectedTime componentsSeparatedByString:@":"];
          NSLog(@"%@",temp);
          NSInteger mins=[[temp objectAtIndex:1]integerValue];
          //check your interval here
          if (mins<=29) {
              selectedTime=[NSString stringWithFormat:@"%@:%@:%@",[temp objectAtIndex:0],@"00",@"00"];
          }else if (mins>=31 && mins<=59){
              selectedTime=[NSString stringWithFormat:@"%@:%@:%@",[temp objectAtIndex:0],@"30",@"00"];
          }else{
      //        selectedTime = [outputFormatter stringFromDate:datePicker.date];
          }
          if (self.delegate && [self.delegate respondsToSelector:@selector(SelectedValue:)]) {
              [self.delegate SelectedValue:selectedTime];
          }
          [self.popupController dismiss];
      }
      

      我的间隔是30分钟

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多