我想添加UITextfield
文字的前缀。 UITextfield
文本长度小于7.有多少个字符小于7,全部用零替换。
如果文字是“1234”,请添加“0001234”之类的前缀。 如果文本为“12345”,请添加类似“0012345”的前缀。 如果文本为“123”,请添加前缀“0000123”。
任何人都可以建议我,如何实施。
答案 0 :(得分:1)
听起来我们真正想要的只是一个数字字符串,总是7个字符长,最左边的字符用填充的零填充用户没有输入的任何内容,对吗?
因此,我们需要一些方法来尽可能简化。
首先,这个现在没有意义,但是我们想要一种方法删除我们在前面填充的零(稍后会有意义)。
所以,borrowing from this Stack Overflow answer ......
- (NSString *)stringByRemovingPaddedZeros:(NSString *)string {
NSRange range = [string rangeOfString:@"^0*" options:NSRegularExpressionSearch];
return [string stringByReplacingCharactersInRange:range withString:@""];
}
我们将从Ilesh's answer借用添加填充的零:
- (NSString *)stringByAddingPaddedZeros:(NSString *)string padLength:(NSInteger)length {
NSString *padding = [@"" stringByPaddingToLength:(length - string.length) withString:@"0" startingAtIndex:0];
return [NSString stringWithFormat:@"%@%@", padding, string];
}
所以现在我们可以在填充和未填充的字符串之间来回,对吧?
现在,最后一步,实施shouldChangeCharactersInRange
:
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *newString = [textField.text stringByReplacingCharactersInRange:range withString:string];
newString = [self stringByRemovingPaddedZeros:newString];
newString = [self stringByAddedPaddedZeros:newString padLength:7];
textField.text = [newString subStringToIndex:7];
return NO;
}
我们总是在此处返回NO
,因为我们手动设置了textField.text
属性。现在当有7个字符(并且没有前导零)时,用户不能再输入。如果有7个字符并且用户命中退格,则它们应该向右移动一个并且将零添加到前面。如果前面的 前导零,则键入字符应该向左移动所有内容并删除前导零,并在前面添加一个新字符。
作为补充说明,此代码不会检查用户是否只输入数字。为此需要一些额外的逻辑。我只是建议在进入string
中的任何其他代码之前检查replacementString(shouldChangeCharactersInRange
)是否只是数字。
答案 1 :(得分:0)
此处打印按钮单击时的文本字段文本。检查方法中的代码。
- (IBAction)logTextFieldText:(id)sender
{
NSMutableString *str=[[NSMutableString alloc]init];
if (_txtf.text.length<7)
{
for (int i=0;i<7-_txtf.text.length; i++)
{
[str appendString:@"0"];
}
[str appendString:_txtf.text];
}
NSLog(@"final text is: %@",str);
}
答案 2 :(得分:0)
实施UITextFieldDelegate
方法textFieldDidEndEditing:
以填充0。
- (void)textFieldDidEndEditing:(nonnull UITextField *)textField
{
if (textField.text.length < 7) {
// Create a string of 0's to pad with
NSString *padding = [@"" stringByPaddingToLength:(7 - textField.text.length) withString:@"0" startingAtIndex:0];
NSMutableString *change = [textField.text mutableCopy];
// Insert the 0's string
[change insertString:padding atIndex:0];
textField.text = change;
}
}
答案 3 :(得分:0)
如果要修复UITextField文本的length
而不是使用此UITextField delegate
方法。
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if (self.txtGet.text.length>=7) {
return NO;
}
return YES;
}
和完成编辑(或完成按钮),在使用UITextField
值之前添加此行。
NSString *padding = [@"" stringByPaddingToLength:(7 - self.txtGet.text.length) withString:@"0" startingAtIndex:0];
NSMutableString *change = [self.txtGet.text mutableCopy];
// Insert the 0's string
[change insertString:padding atIndex:0];
self.txtGet.text = change;
我认为它对你有帮助。谢谢。