2011-12-05 2 views
0

これを処理する最善の方法を理解できないようです。ユーザーが小数点を押すと、次のテキストフィールドに移動します。私が抱えている問題は、次のテキストフィールドに10進数を表示しているだけで、小数点のみを入力すると機能します。なぜ私は文が始まっているのか分からないので、小数点のみを許可する理由を理解していると信じていますが、ここで最善の方法を見つけることはできません。shouldChangeCharactersInRangeロジック

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString *decmial = @"."; 

    if ([textField.text isEqualToString:@"."]) 
    { 
     if (octet1.text == decmial) { 
      octet1.text = [octet1.text stringByReplacingOccurrencesOfString:decmial withString:@""]; 
      [octet1 isFirstResponder]; 
      [octet2 becomeFirstResponder]; 
     } 
     else if (octet2.text == decmial) { 
      octet2.text = [octet2.text stringByReplacingOccurrencesOfString:decmial withString:@""]; 
      [octet2 isFirstResponder]; 
      [octet3 becomeFirstResponder]; 
     } 
     else if (octet3.text == decmial) { 
      octet3.text = [octet3.text stringByReplacingOccurrencesOfString:decmial withString:@""]; 
      [octet3 isFirstResponder]; 
      [octet4 becomeFirstResponder]; 
     } 
     else if (octet4.text == decmial) { 
      octet4.text = [octet4.text stringByReplacingOccurrencesOfString:decmial withString:@""]; 
      [octet4 isFirstResponder]; 
      [myBitMask becomeFirstResponder]; 
     } 
    } 
    return YES; 
} 

答えて

0

現在、変更対象のテキストフィールドの内容全体が正確に "。"である場合は、何もしません。

if ([string isEqualToString:@"."]) { 

あなたはその後、考慮せずに、順番にあなたのテキストフィールドのそれぞれをテストするために行く:私はあなたが本当にユーザーが代わりに、置換文字列と比較していることを入力したかどうかを確認するためにテストする必要があることを前提とし実際のテキストフィールドは変更されています(関数に渡されたもの)。あなたはそれぞれをチェックして、それがちょうど ""かどうかを確かめます。 (あなたはisEqualToStringの代わりに==を使用しているため、そうしないとします)、そうであれば、ユーザーが入力したばかりの文字列でその文字列全体を置き換えます。確かに非常に奇妙な!ヨーヨーは何をしたいのあなたの説明に基づいて

、方法について:小数点は次のテキストフィールドにプッシュばかり続け以外

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString *decmial = @"."; 

    if ([string isEqualToString:decmial]) 
    { 
     textField.text = [textField.text stringByReplacingOccurrencesOfString:decmial withString:@""]; 

     if (textField == octet1) { 
      [octet2 becomeFirstResponder]; 
     } 
     else if (textField == octet2) { 
      [octet3 becomeFirstResponder]; 
     } 
     else if (textField == octet3) { 
      [octet4 becomeFirstResponder]; 
     } 
     else if (textField == octet4) { 
      [myBitMask becomeFirstResponder]; 
     } 

     // We've done the replacement ourselves and moved to the next field. Don't allow the system to accept the change 

     return NO; 
    } 

    // Default behavior 

    return YES; 
} 
+0

グレートこれは働いていたユーザーが入力したときに、小数点がある場合を除きので、その後数十進数がありますそれを押すと次のテキストフィールドに移動します。テキストフィールドに小数点を置くのを止めるにはどうすればいいですか? – Taken

+0

私はコードを修正しました。それは、OSが(既にあなたがそれをやった)置換をしないようにNOを返す必要があります。 – tarmes

+0

それはそれをしましたが、今は数字以外のものではありません。 – Taken