2010-02-08 4 views
0

Je regarde ce problème depuis une semaine. D'innombrables tasses de Joe, des chats qui marchent sur mon clavier et une petite amie qui veut que je sorte de l'ordinateur portable plus tard - je n'arrive toujours pas à comprendre cela. En espérant que je fais quelque chose de très stupide (100% de chance) que je suis trop à la recherche.Qu'est-ce que je manque sur l'ajout de cette décimale à mon pavé numérique?

J'ai du code qui ajoute un nombre décimal au pavé numérique. La majeure partie du code a été prise d'ici (http://brygruver.squarespace.com/blog/2009/10/1/creating-a-custom-number-pad.html?lastPage=true&postSubmitted=true) et j'utilise son code mais je l'ai modifié un peu pour n'ajouter que la décimale et l'image de la décimale aux deux derniers champs de mes cinq champs totaux.

Voici mon code qui montre l'image décimale et annexant à l'entrée:

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    // We need to access the dot Button declared in the Delegate. 
    helloAppDelegate *appDelegate = (helloAppDelegate *)[[UIApplication sharedApplication] delegate]; 

    // Only if we are editing within the Number Pad Text Field do we want the dot. 
    if (textField == txtUserName4) { 
     // Show the Dot. 
     appDelegate.dot.hidden = NO; 
    } 
    else if (textField == txtUserName5) { 
     // Show the Dot. 
     appDelegate.dot.hidden = NO; 
    } 
    else { 
     // Otherwise, Hide the Dot. 
     appDelegate.dot.hidden = YES; 
    } 
} 

- (void)addDecimal:(NSNotification *)notification { 
    // Apend the Decimal to the TextField. 
    if (txtUserName4.editing) { 
     txtUserName4.text = [txtUserName4.text stringByAppendingString:@"."]; 
    } 
    else if (txtUserName5.editing) { 
     txtUserName5.text = [txtUserName5.text stringByAppendingString:@"."]; 
    } 

Voici une vidéo de ce qui se passe (http://screencast.com/t/OTNhODRiYjAt). La décimale ne montre pas sauf si j'apporte l'erreur d'alerte, puis il s'affiche correctement pour les deux champs. Ainsi, j'ai désactivé la validation des champs et - choquant - les décimales sur les deux derniers champs (http://screencast.com/t/ZmQyOTc1MT). Donc ce ne doit pas être le code montrant les décimales mais la validation que j'ai.

voici la validation que j'ai. Je pense que je laisse tomber la balle avec le champ de texte étant nul ou étant le premier répondeur?

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

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

      //show alert 
      //release alert 

      //if there is alert then clear out the field and make that the FR 


      [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) 
     { 
      //show alert 
      //release alert 

      //if there is alert then clear out the field and make that the FR 


      [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) 
     { 
      //show alert 
      //release alert 

      //if there is alert then clear out the field and make that the FR 


      [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) 
     { 

      //show alert 
      //release alert 

      //if there is alert then clear out the field and make that the FR 


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

     if (numFive > 0.80) 
     { 
      //show alert 
      //release alert 

      //if there is alert then clear out the field and make that the FR 
      [txtUserName5 becomeFirstResponder]; 
      txtUserName5.text = nil; 
     } 
     else 
     { 
      [txtUserName5 resignFirstResponder]; 
     } 
    } 
} 

Je suis vraiment perplexe, mais au moins a compris c'est quelque chose avec ma validation mélanger les choses ...

EDIT: J'ai trouvé si je commente le else qui rend le champ suivant la premier répondeur, alors tout fonctionne comme il se doit. Cela dit, est-ce que le fait de supprimer le else a vraiment nui à ma validation? Cette validation complète a été faite avec l'idée d'utiliser les boutons «fait» et «suivant» lorsque j'utilisais le clavier de base. Maintenant, je vois que tout mon code de validation manque un peu :)

Répondre

0

Le plus probable lorsque vous appelez -becomeFirstResponder, le clavier se redessine, ce qui pousse probablement la vue du clavier au-dessus de votre point de vue magique qui est censé être flottant sur le dessus. Vous devez probablement appeler -bringSubviewToFront: avec votre vue «point» chaque fois que vous changez de premier répondeur.

Questions connexes