我希望用户在TextField
中输入时间。有一些示例可以使用DatePicker
来实现,但这会占用应用程序中的大量空间。当用户点击TextField
时,他应该输入hh:mm
。现在有一个占位符文本,但没有强制用户以此格式输入hh:mm
所以如此,我如何在hh:mm
中使用TextField
格式?或换句话说,在文本字段中输入时间。
答案 0 :(得分:2)
使用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;
}
答案 1 :(得分:0)
使用文本字段的委托方法: -
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{
return YES;
}
在此委托方法中,您可以检查用户在文本字段中输入的文本。
replacementString
为您提供用户正在输入的字符,range
将为您提供插入该字符的位置。
然后,您可以在文本字段中执行所需的格式设置,使其看起来像您想要的 hh:mm 格式。
此后,您需要使用NSDateFormatter
将日期格式化为NSDate
。
请记住,您还需要执行退格检查。因为只要在文本字段中更改了字符,就会调用此委托。
祝你好运。
任何问题,请随时提出
修改强>
如果你确实想要度过这个麻烦。您只需将datePicker设置为textField的输入视图即可。在选择时间时,您可以简单地格式化输入到textField中的字符串。很简单。
答案 2 :(得分:0)
你可以强迫"用户在完成后检查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];
}
}
也许对严格的数字(数字)进行一些其他检查。
答案 3 :(得分:0)
我认为没有必要使用datepicker。您可以使用valuepicker而它可以使用任何格式。它有助于你的valuepicker的委托方法。