2010-01-30 2 views
0

Я использую две формы проверки текста (один, когда они нажимают «Далее», другое, когда они вручную выбирают следующее текстовое поле для ввода), и оно отлично работает. Однако последнее текстовое поле не получает ошибку, и я не могу понять это.Помогите с проблемой Weird Text Validation в приложении iPHone

Вы можете увидеть эту проблему в этом видео в последнем текстовом поле (http://screencast.com/t/ODJiOTAwMzA). Предыдущие четыре работают отлично, как вы можете видеть, но на дне не так много.

Вот мой код:

- (BOOL)textFieldShouldReturn:(UITextField *)textField 
{ 
    if (textField == txtUserName) 
    { 
     NSString *userNameOne = txtUserName.text; 
     double numOne = [userNameOne doubleValue]; 

     if(numOne < 30 || numOne > 80) 
     { 

      //foo 

      [txtUserName becomeFirstResponder]; 
      txtUserName.text = nil; 
     } 
     else 
     { 
      [txtUserName2 becomeFirstResponder]; 
     } 
    } 

    else if (textField == txtUserName2) 
    { 

     NSString *userNameThree = txtUserName2.text; 
     float numTwo = [userNameThree doubleValue]; 

     if (numTwo < 20 || numTwo > 32) 
     { 
      //foo 

      [txtUserName2 becomeFirstResponder]; 
      txtUserName2.text = nil; 
     } 
     else 
     { 
      [txtUserName3 becomeFirstResponder]; 
     } 
    } 
    else if (textField == txtUserName3) 
    { 
     NSString *userNameThree = txtUserName3.text; 
     float numThree = [userNameThree doubleValue]; 

     if (numThree < 475 || numThree > 650) 
     { 
      //foo 

      [txtUserName3 becomeFirstResponder]; 
      txtUserName3.text = nil; 
     } 
     else 
     { 
      [txtUserName4 becomeFirstResponder]; 

     } 
    } 
    else if (textField == txtUserName4) 
    { 
     NSString *userNameFour = txtUserName4.text; 
     double numFour = [userNameFour doubleValue]; 

     if (numFour < 0.5 || numFour > 3.00) 
     { 

         //foo 

      [txtUserName4 becomeFirstResponder]; 
      txtUserName4.text = nil; 
     } 
     else 
     { 
      [txtUserName5 becomeFirstResponder]; 
     } 
    } 

    else if (textField == txtUserName5) 
    { 
     NSString *userNameFive = txtUserName5.text; 
     double numFive = [userNameFive doubleValue]; 

     if (numFive > 1) 
     { 
         //foo 

     } 
    } 
    return NO; 
} 

и здесь

if (textField == txtUserName) 
    { 
     NSString *userNameOne = txtUserName.text; 
     double numOne = [userNameOne doubleValue]; 

     if(numOne < 30 || numOne > 80) 
     { 

         //foo 

      [txtUserName becomeFirstResponder]; 
      txtUserName.text = nil; 
     } 
     else 
     { 
      [txtUserName2 becomeFirstResponder]; 
     } 
    } 

    else if (textField == txtUserName2) 
    { 

     NSString *userNameThree = txtUserName2.text; 
     float numTwo = [userNameThree doubleValue]; 

     if (numTwo < 20 || numTwo > 32) 
     { 

         //foo 

      [txtUserName2 becomeFirstResponder]; 
      txtUserName2.text = nil; 
     } 
     else 
     { 
      [txtUserName3 becomeFirstResponder]; 
     } 
    } 
    else if (textField == txtUserName3) 
    { 
     NSString *userNameThree = txtUserName3.text; 
     float numThree = [userNameThree doubleValue]; 

     if (numThree < 475 || numThree > 650) 
     { 
      //fo 

      [txtUserName3 becomeFirstResponder]; 
      txtUserName3.text = nil; 
     } 
     else 
     { 
      [txtUserName4 becomeFirstResponder]; 

     } 
    } 
    else if (textField == txtUserName4) 
    { 
     NSString *userNameFour = txtUserName4.text; 
     double numFour = [userNameFour doubleValue]; 

     if (numFour < 0.5 || numFour > 3.00) 
     { 

      //foo 

      [txtUserName4 becomeFirstResponder]; 
      txtUserName4.text = nil; 
     } 
     else 
     { 
      [txtUserName5 becomeFirstResponder]; 
     } 
    } 
    else if (textField == txtUserName5) 
    { 
     NSString *userNameFive = txtUserName5.text; 
     double numFive = [userNameFive doubleValue]; 

     if (numFive > 1) 
     { 
      //foo 
     } 
     else 
     { 
      [txtUserName5 becomeFirstResponder]; 
     } 
    } 

ответ

0

Если интерфейс находится в Interface Builder, является выходом для txtUserName5 зацепил?

Для вашего пятого текстового поля, почему у вас нет этих строк после «foo», как вы делаете для других текстовых полей?

if (numFive > 1) 
{ 
    //foo 
    [txtUserName5 becomeFirstResponder]; 
    txtUserName5.text = nil; 
} 

Кроме того, для еще статей, а не стать первым ответчиком снова, вы должны уйти в отставку первого ответчика (чтобы закрыть клавиатуру):

else 
{ 
    //[txtUserName5 becomeFirstResponder]; 
    [txtUserName5 resignFirstResponder]; 
    return YES; 
} 
+0

спасибо за ответы. Я могу рассмотреть проблемы, которые вы указали, но это все еще не помогает моей проблеме пятого текстового поля, которое не проверяется. Кроме того, пятое текстовое поле подключается к IB, как вы можете видеть здесь (http://screencast.com/t/NWE5NGI3NTM). Я ценю любую помощь, которую вы можете предоставить. – HollerTrain

+0

Установите точку останова и/или используйте NSLog. Является ли ваш код проверки ударом? Каковы значения в сравнении? – gerry3

+0

Спасибо за вашу дальнейшую помощь. Вот видеоролик о нем, показывающий, что предыдущие поля работают с настройкой точек останова, но когда я устанавливаю его в последнее поле, он ничего не делает, что делает это еще более странным для меня. (http://screencast.com/t/NjY2MjMyM2Q) – HollerTrain

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