2015-06-24 2 views
1

Используя приведенный ниже код, я могу автоматически добавлять дефис, но не умею правильно редактировать текстовое поле.Добавить дефис автоматически в текстовое поле, но не в состоянии редактировать текстовое поле (маскирование номера телефона)

Например, когда я нажимаю, чтобы вставить любое число между уже введенными числами в текстовое поле, это будет вставлять номер в конец текстового поля и в дальнейшем не удалять это число должным образом. Может кто-нибудь мне помочь?

-(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; 
} 
+0

ваш вопрос не ясно ?? – Sujay

+0

Что @Sujay сказал, мы не знаем, что ваш код пытается выполнить. В частности, где вы хотите, чтобы дефис появлялся и когда вы этого хотите? Из вашего кода ясно, что у вас есть условия для этого, но мы не знаем, что это такое. –

+0

Hyphen работает правильно. Но когда я делаю редактирование в количестве, которое не работает. когда я ввел номер внутри номера, он дойдет до конца. Я хочу изменить исправление в моем коде. –

ответ

2

Этот код также будет работать, когда мы будем делать копировать-вставить текст в UITextField.

Предупреждение- Этот код не будет работать с кнопкой удаления вашего клавиатуры. В любом случае вам нужно только кнопка Backspace -клавиатуры потому Кнопка удаления Мобильного клавишной панели работают как кнопку Возвр клавиатуры

Примечание- использование 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; 
} 
+0

@ Sujay .... Опять я не могу редактировать в номере. Это не может решить мою проблему. –

+0

Что вы пытаетесь и как вы пытаетесь? – Sujay

+0

* «Предположим, что пользователь впервые вводит номер, например, 123-456-7890.После этого он хочет изменить цифру 4 на 7, а 7 цифр не вставлен в нужное место.И предел 10-значного числа будет превышать. Я хочу решить эту проблему. "* Это то, что вы хотите, правильно? – Sujay

0
  1. Соблюдайте UITextFieldTextDidChangeNotification. Помеченное текстовое поле сохраняется в параметре объекта уведомления.

  2. проверка текста формата notification.object.text при необходимости вставить дефис

+0

Можете ли вы дать мне пример для этого. Как реализовать то, что сказал. –

Смежные вопросы