是否可以在 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 中设置宽空间的主要内容,如果未能解决你的问题,请参考以下文章
在uitextfield ios中显示\ u2205 [重复]