2015-04-22 2 views
3

Мне нужно обработать перемещение по нескольким UITextField с помощью кнопки (Next/Done), и теперь у меня есть разрешить только один текст/число в каждом UITextField, как мы могли бы сделать это в UITextField, как показано на изображении нижеКак я могу разрешить UITextField иметь только один текст/номер и перемещаться по нескольким `UITextField` с помощью кнопки Next/Done

enter image description here

Я использовал следующий код недавно, и был в состоянии достигнуть тоже, но есть проблема, что когда я первый войти текст/номер в UITextField вводится в UITextField, и когда я введу следующий текст/номер во второй раз он используется только для того, чтобы нажать на следующий UITextField. Я хочу добиться в том, что, когда я ввести текст/число во второй раз она должна быть прижата к следующим UITextField, а также значение должно быть введено в следующем UITextField

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField.tag<10) { 

     if ((textField.text.length >= 1) && (string.length > 0)) 
     { 

      NSInteger nextText = textField.tag + 1; 
      // Try to find next responder 
      UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; 
      if (! nextResponder) 
       [textField resignFirstResponder]; 
       // nextResponder = [textField.superview viewWithTag:1]; 

      if (nextResponder){ 
       // Found next responder, so set it. 
       [nextResponder becomeFirstResponder]; 

       return NO; 

      } 

     } 
    } 

    return YES; 

} 

Я решить мою проблему, используя следующий код, но У меня есть еще одна проблема слева. Для последнего UITextField мне нужно его resignFirstResponder сразу после его заполнения. Но в настоящее время, когда он заполнить и пользовательский нажмите следующий текст только тогда resignFirstResponder происходит

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField.tag<10) { 

     if ((textField.text.length >= 1) && (string.length > 0)) 
     { 

      NSInteger nextText = textField.tag + 1; 
      UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; 
      if (! nextResponder) 
       [textField resignFirstResponder]; 
       if (nextResponder){ 
        [nextResponder becomeFirstResponder]; 

        UITextField* nextTextfield= (UITextField*) [textField.superview viewWithTag:nextText]; 

        if ((nextTextfield.text.length < 1)){ 
        [nextTextfield setText:string]; 
        } 
        return NO; 
       } 

     } 
    } 

    return YES; 

} 

ответ

3

вы можете сделать это с помощью метода TextField делегата вы можете установить метки для каждого текстового поля в последовательности, как 1,2,3 .... теперь в shouldChangeCharactersInRange

Метод правильной логики, который делает следующее поле первым ответчиком, когда вы вводите один текст/номер в текстовом поле.

как приведено ниже

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
    { 

    if ((textField.text.length >= 1) && (string.length > 0)) 
     { 

      NSInteger nextText = textField.tag + 1; 
      // Try to find next responder 
      UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; 
     if (! nextResponder) 
      nextResponder = [textField.superview viewWithTag:1]; 

      if (nextResponder) 
       // Found next responder, so set it. 
       [nextResponder becomeFirstResponder]; 

     return NO; 
     } 
    return YES; 
    } 

Edit:

Если вы хотите отобразить ввод текста АЛОС на скачку TextField вы можете добавить эти строки после [nextResponder becomeFirstResponder]

добавить эти строки, приведенные ниже

 UITextField nextTextfield= (UITextField) [textField.superview viewWithTag:nextText]; 
    [nextTextfield setText:string]; 

EDIT для отставки ответчика для клавиатуры в последнем текстовом поле.

If you want resign responder for last textfield 

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    if (textField.tag<10) { 

     if ((textField.text.length >= 1) && (string.length > 0)) 
     { 

      NSInteger nextText = textField.tag + 1; 
      // Try to find next responder 
      UIResponder* nextResponder = [textField.superview viewWithTag:nextText]; 
      if (! nextResponder) 
       [textField resignFirstResponder]; 
      // nextResponder = [textField.superview viewWithTag:1]; 

      if (nextResponder){ 
       // Found next responder, so set it. 
       [nextResponder becomeFirstResponder]; 
       UITextField *nextTextfield= (UITextField*) [textField.superview viewWithTag:nextText]; 
       if (nextTextfield.text.length<1) { 
        if(nextTextfield.tag==4){ 
         [nextTextfield setText:string]; 
         [nextTextfield resignFirstResponder]; 
        }else{ 
         [nextTextfield setText:string]; 
        } 


       } 

       return NO; 

      } 

     } 
    } 

    return YES; 

} 

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

+0

спасибо его работа идеального –

+0

я модифицировал этот вопрос вы можете мне помочь чтобы решить недавнюю проблему –

+0

Привет, вы можете сделать это, добавив два UITextField * nextTextfield = (UITextField *) [textField.superview viewWithTag: nextText]; [nextTextfield setText: string]; line после [nextResponder станет первымResponder]; line отредактированный ответ – user1548843

2

Чтобы ввести только цифры в текстовое поле и задать длину текстового поля, попробуйте это:

-(BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{ 

// Check for non-numeric characters 
NSUInteger lengthOfString = string.length; 
for (NSInteger loopIndex = 0; loopIndex < lengthOfString; loopIndex++) { 
    unichar character = [string characterAtIndex:loopIndex]; 
    if (character < 48) return NO; // 48 unichar for 0 
    if (character > 57) return NO; // 57 unichar for 9 
} 

// Check for total length 
NSUInteger proposedNewLength = textField.text.length - range.length + string.length; 
if (proposedNewLength > 1) return NO;  //set your length here 
return YES; 
} 
+0

может у пожалуйста, помогите мне до-голосования –

1

установка делегата текстового поля и реализация следующего метода делегата:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    // Prevent crashing undo bug – see note below. 
    if(range.length + range.location > textField.text.length) 
    { 
     return NO; 
    } 

    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 25) ? NO : YES; 
} 

Set the maximum character length of a UITextField

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