为UITextField添加前缀

时间:2015-07-08 12:25:12

标签: ios objective-c uitextfield

我想添加UITextfield文字的前缀。 UITextfield文本长度小于7.有多少个字符小于7,全部用零替换。

如果文字是“1234”,请添加“0001234”之类的前缀。 如果文本为“12345”,请添加类似“0012345”的前缀。 如果文本为“123”,请添加前缀“0000123”。

任何人都可以建议我,如何实施。

4 个答案:

答案 0 :(得分:1)

听起来我们真正想要的只是一个数字字符串,总是7个字符长,最左边的字符用填充的零填充用户没有输入的任何内容,对吗?

因此,我们需要一些方法来尽可能简化。

首先,这个现在没有意义,但是我们想要一种方法删除我们在前面填充的零(稍后会有意义)。

所以,borrowing from this Stack Overflow answer ......

- (NSString *)stringByRemovingPaddedZeros:(NSString *)string {
    NSRange range = [string rangeOfString:@"^0*" options:NSRegularExpressionSearch];
    return [string stringByReplacingCharactersInRange:range withString:@""];
}

我们将从Ilesh's answer借用添加填充的零:

- (NSString *)stringByAddingPaddedZeros:(NSString *)string padLength:(NSInteger)length {
    NSString *padding = [@"" stringByPaddingToLength:(length - string.length) withString:@"0" startingAtIndex:0];
    return [NSString stringWithFormat:@"%@%@", padding, string];
}

所以现在我们可以在填充和未填充的字符串之间来回,对吧?

现在,最后一步,实施shouldChangeCharactersInRange

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
    NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
    newString = [self stringByRemovingPaddedZeros:newString];
    newString = [self stringByAddedPaddedZeros:newString padLength:7];
    textField.text = [newString subStringToIndex:7];

    return NO;
}

我们总是在此处返回NO,因为我们手动设置了textField.text属性。现在当有7个字符(并且没有前导零)时,用户不能再输入。如果有7个字符并且用户命中退格,则它们应该向右移动一个并且将零添加到前面。如果前面的 前导零,则键入字符应该向左移动所有内容并删除前导零,并在前面添加一个新字符。

作为补充说明,此代码不会检查用户是否只输入数字。为此需要一些额外的逻辑。我只是建议在进入string中的任何其他代码之前检查replacementString(shouldChangeCharactersInRange)是否只是数字。

答案 1 :(得分:0)

此处打印按钮单击时的文本字段文本。检查方法中的代码。

- (IBAction)logTextFieldText:(id)sender
{

   NSMutableString *str=[[NSMutableString alloc]init];

   if (_txtf.text.length<7)
   {

      for (int i=0;i<7-_txtf.text.length; i++)
      {
         [str appendString:@"0"];
      }
      [str appendString:_txtf.text];
   }

   NSLog(@"final text is: %@",str);

}

答案 2 :(得分:0)

实施UITextFieldDelegate方法textFieldDidEndEditing:以填充0。

- (void)textFieldDidEndEditing:(nonnull UITextField *)textField
{
    if (textField.text.length < 7) {
        // Create a string of 0's to pad with
        NSString *padding = [@"" stringByPaddingToLength:(7 - textField.text.length) withString:@"0" startingAtIndex:0];
        NSMutableString *change = [textField.text mutableCopy];
        // Insert the 0's string
        [change insertString:padding atIndex:0];
        textField.text = change;
    }
}

答案 3 :(得分:0)

如果要修复UITextField文本的length而不是使用此UITextField delegate方法。

 - (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (self.txtGet.text.length>=7) {
        return NO;
    }
    return YES;
}

和完成编辑(或完成按钮),在使用UITextField值之前添加此行。

 NSString *padding = [@"" stringByPaddingToLength:(7 - self.txtGet.text.length) withString:@"0" startingAtIndex:0];
    NSMutableString *change = [self.txtGet.text mutableCopy];
    // Insert the 0's string
    [change insertString:padding atIndex:0];
    self.txtGet.text = change;

我认为它对你有帮助。谢谢。