0

我正在编写一个小应用程序,这将对我的日常工作有所帮助。因此应用程序应该计算时间值。我在应用程序顶部有一个 uitextfield。

现在我想在输入时格式化用户的输入。在每 2 位数字之后,我想插入一个:

就像神奇的应用程序“时间码”一样。

请给我一个提示,如何实现我的愿望?

截屏

4

2 回答 2

0

您需要使用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;
}

上面的代码将在正常情况下工作。如果用户在字符之间进行编辑,则会出现问题,您还需要对其进行管理。

于 2013-03-14T08:33:01.730 回答
0

此代码将为您工作....

-(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;

}

我检查并正常工作以满足您的要求。

于 2013-03-14T08:59:50.443 回答