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

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

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

非常感谢。

【问题讨论】:

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

标签: ios objective-c passwords uitextfield


【解决方案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。希望您和其他人现在发现它很有用:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-20
    • 2013-03-13
    • 1970-01-01
    • 2020-06-18
    • 2014-02-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多