在文本字段中自动添加连字符但无法编辑文本字段(Phone 数字掩码)
Add hyphen automatically in text field but not able to edit the textfield (Phone number masking)
使用下面的代码,我可以自动添加连字符,但无法在文本字段中正确进行编辑。
例如,当我单击以在文本字段中已输入的数字之间插入任何数字时,这将在文本字段的末尾插入数字,并且不会正确删除该数字。谁能帮帮我?
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField == txtUserName)
{
if (range.location == 12)
{
return NO;
}
if (range.length == 0 && ![[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]])
{
return NO;
}
if (range.length == 0 && (range.location == 3 || range.location == 7))
{
txtUserName.text = [NSString stringWithFormat:@"%@- %@",txtUserName.text,string];
return NO;
}
if (range.length == 1 &&(range.location==4 ||range.location ==7))
{
range.location--;
range.length = 2;
txtUserName.text = [txtUserName.text stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"Nisha..%@",txtUserName.text);
return NO;
}
}
return YES;
}
观察UITextFieldTextDidChangeNotification
。受影响的文本字段存储在通知的对象参数中。
检查 notification.object.text
的文本格式,如果需要插入连字符
当我们在 UITextField
中复制粘贴文本时,此代码也可以使用。
Warning- This code won't work with your keyboard's delete button. Anyway you need only keyboard's backspace button because Mobile keypad's delete button work like keyboard's backspace button
注意- 使用 tag
作为您的 UITextField
而不是直接将 textField
与您的插座
进行比较
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//(textField == txtUserName)
// don't compare with ID, use tag
if(textField.tag == 0 )
{
NSString *text = textField.text;
NSUInteger textLength = text.length;
NSString *trimText = [text stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSUInteger trimTextLength = trimText.length;
if (range.length == 0 && [string rangeOfCharacterFromSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
{
return NO;
}
if( string.length > 0 ) {
NSString *replacedText = text;
if(trimTextLength < 10) {
NSInteger remainingNumbers = (10-trimTextLength);
if(string.length > remainingNumbers) {
string = [string substringToIndex:remainingNumbers];
}
replacedText = [replacedText stringByReplacingCharactersInRange:range withString:string];
}
NSString *trimReplacedText = [replacedText stringByReplacingOccurrencesOfString:@"-" withString:@""];
if( trimReplacedText.length > 3 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"];
}
if( trimReplacedText.length > 7 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(7, 0) withString:@"-"];
}
textField.text = trimReplacedText;
return NO;
}
bool flag = false;
if (range.length == 1 &&(range.location == 4 || (range.location == 7 && (textLength-trimTextLength)== 1 && [text rangeOfString:@"-"].location == 7) || (range.location == 8 && (textLength-trimTextLength)== 2) ))
{
range.location--;
range.length = 2;
flag = true;
}
else if (range.length >= 1)
{
flag = true;
}
if(flag) {
NSString *replacedText = [textField.text stringByReplacingCharactersInRange:range withString:@""];
NSString *trimReplacedText = [replacedText stringByReplacingOccurrencesOfString:@"-" withString:@""];
if( trimReplacedText.length > 3 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"];
}
if( trimReplacedText.length > 7 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(7, 0) withString:@"-"];
}
textField.text = trimReplacedText;
return NO;
}
}
return YES;
}
即使这个问题太老了,但如果您需要帮助,可以使用 VMaskTextField 库
使用下面的代码,我可以自动添加连字符,但无法在文本字段中正确进行编辑。
例如,当我单击以在文本字段中已输入的数字之间插入任何数字时,这将在文本字段的末尾插入数字,并且不会正确删除该数字。谁能帮帮我?
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
if(textField == txtUserName)
{
if (range.location == 12)
{
return NO;
}
if (range.length == 0 && ![[NSCharacterSet decimalDigitCharacterSet] characterIsMember:[string characterAtIndex:0]])
{
return NO;
}
if (range.length == 0 && (range.location == 3 || range.location == 7))
{
txtUserName.text = [NSString stringWithFormat:@"%@- %@",txtUserName.text,string];
return NO;
}
if (range.length == 1 &&(range.location==4 ||range.location ==7))
{
range.location--;
range.length = 2;
txtUserName.text = [txtUserName.text stringByReplacingCharactersInRange:range withString:@""];
NSLog(@"Nisha..%@",txtUserName.text);
return NO;
}
}
return YES;
}
观察
UITextFieldTextDidChangeNotification
。受影响的文本字段存储在通知的对象参数中。检查
notification.object.text
的文本格式,如果需要插入连字符
当我们在 UITextField
中复制粘贴文本时,此代码也可以使用。
Warning- This code won't work with your keyboard's delete button. Anyway you need only keyboard's backspace button because Mobile keypad's delete button work like keyboard's backspace button
注意- 使用 tag
作为您的 UITextField
而不是直接将 textField
与您的插座
-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string
{
//(textField == txtUserName)
// don't compare with ID, use tag
if(textField.tag == 0 )
{
NSString *text = textField.text;
NSUInteger textLength = text.length;
NSString *trimText = [text stringByReplacingOccurrencesOfString:@"-" withString:@""];
NSUInteger trimTextLength = trimText.length;
if (range.length == 0 && [string rangeOfCharacterFromSet: [[NSCharacterSet decimalDigitCharacterSet] invertedSet]].location != NSNotFound)
{
return NO;
}
if( string.length > 0 ) {
NSString *replacedText = text;
if(trimTextLength < 10) {
NSInteger remainingNumbers = (10-trimTextLength);
if(string.length > remainingNumbers) {
string = [string substringToIndex:remainingNumbers];
}
replacedText = [replacedText stringByReplacingCharactersInRange:range withString:string];
}
NSString *trimReplacedText = [replacedText stringByReplacingOccurrencesOfString:@"-" withString:@""];
if( trimReplacedText.length > 3 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"];
}
if( trimReplacedText.length > 7 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(7, 0) withString:@"-"];
}
textField.text = trimReplacedText;
return NO;
}
bool flag = false;
if (range.length == 1 &&(range.location == 4 || (range.location == 7 && (textLength-trimTextLength)== 1 && [text rangeOfString:@"-"].location == 7) || (range.location == 8 && (textLength-trimTextLength)== 2) ))
{
range.location--;
range.length = 2;
flag = true;
}
else if (range.length >= 1)
{
flag = true;
}
if(flag) {
NSString *replacedText = [textField.text stringByReplacingCharactersInRange:range withString:@""];
NSString *trimReplacedText = [replacedText stringByReplacingOccurrencesOfString:@"-" withString:@""];
if( trimReplacedText.length > 3 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(3, 0) withString:@"-"];
}
if( trimReplacedText.length > 7 ) {
trimReplacedText = [trimReplacedText stringByReplacingCharactersInRange:NSMakeRange(7, 0) withString:@"-"];
}
textField.text = trimReplacedText;
return NO;
}
}
return YES;
}
即使这个问题太老了,但如果您需要帮助,可以使用 VMaskTextField 库