用户如何在文本字段中输入时间 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 的委托方法有帮助。
我希望用户在 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 的委托方法有帮助。