是否可以在 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 中提供的答案。
但是,它不处理字符数限制。
我有一个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 中提供的答案。
但是,它不处理字符数限制。