我正在编写一个小应用程序,这将对我的日常工作有所帮助。因此应用程序应该计算时间值。我在应用程序顶部有一个 uitextfield。
现在我想在输入时格式化用户的输入。在每 2 位数字之后,我想插入一个:
就像神奇的应用程序“时间码”一样。
请给我一个提示,如何实现我的愿望?
我正在编写一个小应用程序,这将对我的日常工作有所帮助。因此应用程序应该计算时间值。我在应用程序顶部有一个 uitextfield。
现在我想在输入时格式化用户的输入。在每 2 位数字之后,我想插入一个:
就像神奇的应用程序“时间码”一样。
请给我一个提示,如何实现我的愿望?
您需要使用shouldChangeCharactersInRange:
委托方法UITextField
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSString *tempString = [textField.text stringByReplacingCharactersInRange:range withString:string];
NSArray *temp = [tempString componentsSeparatedByString:@":"];
NSString *test = [temp lastObject];
if([test length] == 2)
{
test = [NSString stringWithFormat:@"%@:",test];
tempString = @"";
for(int loop = 0;loop<[temp count]-1;loop++)
{
tempString = [tempString stringByAppendingFormat:@"%@:",[temp objectAtIndex:loop]];
}
if([temp count] != 1)
tempString = [tempString stringByAppendingFormat:@"%@",test];
else
tempString = test;
}
textField.text = tempString;
return NO;
}
上面的代码将在正常情况下工作。如果用户在字符之间进行编辑,则会出现问题,您还需要对其进行管理。
此代码将为您工作....
-(BOOL)textField:(UITextField*)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
NSCharacterSet *numberSet = [NSCharacterSet characterSetWithCharactersInString:@"0123456789"];
if(string.length == 0)
{
return YES;
}
else if([string rangeOfCharacterFromSet:numberSet].location == NSNotFound)
{
return NO;
}
NSString *textFieldText = [textField.text stringByReplacingOccurrencesOfString:@":" withString:@""];
if((string.length == 1) && (textFieldText.length > 0) && (textFieldText.length % 2) == 0)
textField.text = [NSString stringWithFormat:@"%@:",textField.text];
return YES;
}
我检查并正常工作以满足您的要求。