是否可以在 UITextField 中设置宽 space

Is it possible to set wide space in UITextField

我有一个UITextField,基本上是4位数字NSInteger。现在我想把 "Pass code" 看一下。我的意思是每个数字之间会有一定的space。类似于下图。

我知道我可以将 space 放在 UITextField 的字体和背面,但我希望每个输入字符之间有一定的距离。 iOS 有可能吗?如果是,将不胜感激任何类型的指南建议。

非常感谢。

首先,将 Tag 添加到所有四个文本字段,即 1、2、3 和 4。

并使用以下代码在文本字段中输入文本。这里的 StrTxt 是所有四个文本字段的组合字符串。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{

int currentTag = (int)textField.tag;

if(string.length==0 && range.length==1)
{
    textField.text = @"";
    UITextField *newTextField = (UITextField *) [textField.superview viewWithTag:(currentTag-1)];
    [newTextField becomeFirstResponder];
    StrTxt = [StrTxt substringToIndex:currentTag-1];
    return NO;
}
else
    StrTxt = [StrTxt stringByAppendingString:string];

if((textField.text.length + string.length) >= 1)
{
    if(currentTag == 4)
    {
        //do your stuff here.

        if(textField.text.length<1)
            return YES;
        else
            return NO;
    }


    UITextField *newTextField = (UITextField *) [textField.superview viewWithTag:(currentTag+1)];
    if(newTextField.text.length==0)
        [newTextField becomeFirstResponder];
    if(textField.text.length==0)
    {
        textField.text = [textField.text stringByAppendingString:string];
        return NO;
    }
    else
    {
        if(currentTag+1 == 4)
        {
            if(newTextField.text.length>=1)
                return NO;

            //do your stuff here.
        }
        else
            if(newTextField.text.length>=1)
                return NO;
        return YES;
    }

}
return YES;
}

如果有四个文本框就很简单了。 将标签分配给您的文本字段,即 1,2,3,4.... 将委托分配给您的文本字段并使用它的委托方法

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
    if (textField.text.length == 1) {
        switch (textField.tag) {
            case 1:
                [txt2 becomeFirstResponder];
                break;
            case 2:
                [txt3 becomeFirstResponder];
                break;
            case 3:
                [txt4 becomeFirstResponder];
            default:
                [textField resignFirstResponder];
                break;
        }
    }
    return YES;
}

如果您需要任何进一步的帮助,请告诉我

 -(void)textViewDidChange:(UITextView *)textView
{

NSInteger num=textView.selectedRange.location;

NSString *final_key=textView.text;
        final_key=[final_key uppercaseString];

final_key=[final_key stringByReplacingOccurrencesOfString:@" " withString:@""];

    textView.text=@"";
        while(final_key.length>3)
        {
            NSString *str=[final_key substringToIndex:4];
            textView.text=[textView.text stringByAppendingFormat:@"%@ ",str];
            final_key=[final_key substringFromIndex:4];

        }

        textView.text=[textView.text stringByAppendingFormat:@"%@",final_key];

if(!delete_key_pressed)
        {

 NSString *ch=[NSString stringWithFormat:@"%c",[textView.text characterAtIndex:num-1]];

 //NSLog(@"%@",ch);

        if([ch isEqualToString:@" "])
        {
            num=num+1;
        }
        }
        else{
           // num=textView.selectedRange.location;
           NSString *ch=[NSString stringWithFormat:@"%c",[textView.text characterAtIndex:num-1]];
           // NSLog(@"%@",ch);
            if([ch isEqualToString:@" "])
            {
                num=num-1;
            }
        }
        textView.selectedRange=NSMakeRange(num, 0);


}

已在 Swift 3.0

中回答
textfield.defaultTextAttributes.updateValue(spacing, forKey: NSKernAttributeName)

其中 spacing 是一个 CGFloat。例如 2.0.

有关详细信息,请查看我在下面分享的 link 中提供的答案。

但是,它不处理字符数限制。