是否可以在 UITextField 中设置宽空间

Posted

技术标签:

【中文标题】是否可以在 UITextField 中设置宽空间【英文标题】:Is it possible to set wide space in UITextField 【发布时间】:2015-05-19 11:31:46 【问题描述】:

我有一个UITextField,它基本上是 4 位数的NSInteger。现在我想带上“密码”看看。我的意思是每个数字之间会有一定的空间。如下图所示。

我知道我可以在UITextField 的字体和背面放置空格,但我希望每个输入字符之间有一定的距离。在ios中可以吗?如果是,我们将不胜感激任何形式的指南建议。

非常感谢。

【问题讨论】:

你想在单个 UITextField 中管理它吗?或者如果有四个就可以了吗? @Gati,感谢您的评论。是的,单身UITextField 会更好。 :) 那么管理与您在屏幕截图中附加的相同 UI 有点困难。如果你可以加4,那么它很容易实现。 (Y) 【参考方案1】:

首先,将 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;

【讨论】:

感谢您的评论。它工作正常。除了获取四个文本字段数据的组合。 :( 应该是 NSString *StrTxt; 不可以在string中找到结果。它运行良好。谢啦。 :)【参考方案2】:

如果有四个文本字段,那就很简单了。 为您的文本字段分配标签,即 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;

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

【讨论】:

使用这个有点问题。但感谢您的评论。祝你有美好的一天。 :)【参考方案3】:
 -(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);



【讨论】:

【参考方案4】:

已在 Swift 3.0

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

其中间距是 CGFloat。例如 2.0。

有关更多详细信息,请查看我在下面共享的链接中提供的答案。

How to set letter spacing of UITextField

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

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @LucaD'Alberti。根据您的建议,我已包含代码 sn-p。希望您和其他人现在发现它很有用:)

以上是关于是否可以在 UITextField 中设置宽空间的主要内容,如果未能解决你的问题,请参考以下文章

洗5寸7寸照片在photoshop中设置宽高分辨率是多少

解决HTML中设置宽或高为百分比时无效的问题

display属性

在uitextfield ios中显示\ u2205 [重复]

如何在 UITextField 子类中设置 UITextField 的属性

iOS开发中设置UITextField的占位文字的颜色,和光标的颜色