用户如何在文本字段中输入时间 ios

How can user Enter time in a Text Field ios

我希望用户在 TextField 中输入时间。有一些示例可以使用 DatePicker 来完成,但在应用程序中会消耗大量 space。当用户点击 TextField 时,他应该输入 hh:mm。现在有一个占位符文本,但没有强制用户以这种格式输入 hh:mm

那么我如何在 TextField 中使用 hh:mm 格式?或者换句话说,在文本字段中输入时间。

使用文本域的委托方法:-

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
  return YES;
 }

在此委托方法中,您可以检查用户在文本字段中输入的文本。

replacementString 给出用户输入的字符,range 给出插入字符的位置。

然后您可以在文本字段中执行所需的格式设置,使其看起来像您想要的 hh:mm 格式。

此外,在执行此操作后,您将需要使用 NSDateFormatter 将日期相应地格式化为 NSDate

请记住,您还需要执行退格检查。因为每当文本字段中的字符发生更改时都会调用此委托。

祝你好运。

有任何问题,随时提问

编辑

如果你确实想经历这个麻烦。您可以简单地将 datePicker 设置为 textField 的输入视图。在选择时间时,您可以简单地格式化正在输入到文本字段中的字符串。很简单。

您可以 "force" 用户在用户完成后检查 TextField.text(我将自己命名为 pastetext )内容。首先检查字符串的长度。然后检查格式如下:

NSString *testtocheck= [[NSString alloc]init];
NSString *firstpart= [[NSString alloc]init]; // 00 - 23
NSString *firstpartisZero= [[NSString alloc]init]; // 01 - 09
NSString *myseparator= [[NSString alloc]init]; // @":"
NSString *secondpart= [[NSString alloc]init]; // 00 - 59
NSString *secondpartisZero= [[NSString alloc]init]; // 01 - 09
BOOL ok =NO;
testtocheck = self.pastetext.text;
if(testtocheck.length==0 || [testtocheck isKindOfClass:[NSNull class]] || [testtocheck isEqualToString:@""]||[testtocheck  isEqualToString:NULL]||[testtocheck isEqualToString:@"(null)"]||testtocheck==nil || [testtocheck isEqualToString:@"<null>"]){
    //   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: ....
    //      [alertView show];
} else if(testtocheck.length==5) {
    firstpart = [testtocheck substringToIndex:2];
    //now do the check
    int FIRSTval = [firstpart integerValue];

    firstpartisZero = [firstpart substringToIndex:1];
    int FIRSTvaliszero = [firstpartisZero integerValue];
              if(FIRSTvaliszero==0) {

        firstpart = [testtocheck  substringWithRange:NSMakeRange(1, 1)];
        FIRSTval = [firstpart integerValue];
    } else {
         firstpart = [testtocheck substringToIndex:2];
         FIRSTval = [firstpart integerValue];
    }
    NSLog(@"FIRSTvaliszero %d",FIRSTvaliszero);

    if(FIRSTval>= 0 && FIRSTval <= 23) {
        ok =YES;
    } else {
        //   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: ....
        //      [alertView show];
        ok= NO;
    }

    if(ok) {
        myseparator = [testtocheck  substringWithRange:NSMakeRange(2, 1)];
        if([myseparator isEqualToString:@":"]) {
            ok =YES;
        } else {
            //   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: ....
            //      [alertView show];
            ok= NO;
        }
    }
    if(ok) {
        secondpart =[testtocheck substringFromIndex:3];
        int SECONDval = [secondpart integerValue];
        secondpartisZero = [secondpart substringToIndex:1];
        int SECONDvaliszero = [secondpartisZero integerValue];

        if(SECONDvaliszero==0) {
            secondpart = [testtocheck substringFromIndex:4];
            SECONDval = [secondpart integerValue];
        } else {
            secondpart = [testtocheck substringToIndex:3];
            SECONDval = [secondpart integerValue];
        }
     NSLog(@"SECONDvaliszero %d",SECONDvaliszero);


        if(SECONDval>= 0 && SECONDval <= 59) {
            ok =YES;
        } else {
            //   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: ....
            //      [alertView show];
            ok= NO;
        }

    }
    if(ok) {
        //DO WHAT YOU WANT WITH self.pastetext.text
    } else {
        //   UIAlertView *alertView = [[UIAlertView alloc] initWithTitle: ....
        //      [alertView show];

    }
}

也许对严格数字(数字)做一些其他检查。

使用UITextField's shouldChangeCharactersInRange:replacementString: delegate 方法格式化 hh:mm 格式化文本字段中的文本

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
  if ([string rangeOfCharacterFromSet:[[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
  {
    // BasicAlert(@"", @"This field accepts only numeric entries.");
    return NO;
  }
  else
  {
    NSString *text = textField.text;
    NSInteger length = text.length;
    BOOL shouldReplace = YES;

    if (![string isEqualToString:@""])
    {
        switch (length)
        {
            case 2:
                textField.text = [text stringByAppendingString:@":"];
                break;

            default:
                break;
        }
        if (length > 4)
            shouldReplace = NO;
    }

    return shouldReplace;
  }
  return YES;
}

我认为没有必要使用日期选择器。您可以使用 valuepicker 而它,您可以使用任何格式。它对您 valuepicker 的委托方法有帮助。