2011-12-03 13 views
2

私は私の答え、 のサイトを検索しましたが、私はそれがどのようにこの問題に陥っているかと思います。NSStringを数値に制限するとともに、#が入力された場合には#を制限します。 (コードが含まれています)

私は自分の1と唯一のテキストフィールドを10文字と数字のみに制限しようとしています。

以下は、このサイトの他の質問からほとんど外れているコードです。 私は何をしようとしていることはマッシュは私の限界のために一緒にこのコードで

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LEGAL] invertedSet]; 
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; 
    NSString *newString = [myTextField.text stringByReplacingCharactersInRange:range withString:filtered]; 
    return !([newString length] > 10); 
} 

あり、私は私のテキストフィールドをクリックするまで、私のビルドに問題がありません...しかし、私は、スレッドがブレークポイントで停止した」旨の緑色の矢印警告が表示されます1 " 私は今いくつかの異なることを試しましたが、今は私が困惑していると感じています。私はこれが誰かにとって本当に簡単なものであると期待しています...

彼らは個別に以下のコードは、私はそれらを一緒に働くように見えることはできません。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSString *newString = [myTextField.text stringByReplacingCharactersInRange:range withString:string]; 
    return !([newString length] > 10); 
} 

これは、これはまた、唯一の問題なく数字に私の入力を制限し

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{ 
    NSCharacterSet *cs = [[NSCharacterSet characterSetWithCharactersInString:LEGAL] invertedSet]; 
    NSString *filtered = [[string componentsSeparatedByCharactersInSet:cs] componentsJoinedByString:@""]; 
    return [string isEqualToString:filtered]; 
} 

を10 に私の入力を制限し、...します。 は、私は誰もがこの1で私を助けることができる ...私はちょうど彼らが一緒に動作するように見えることはできません...唯一の数字として

を法的定義されて?

+0

正確な例外を取得するようにNSZombieEnableを設定します。それはコンソールで詳細な例外を表示します。例外を見つけて投稿してください。 –

+0

ブレークポイントを打っています。あなたはそれが止まり、「スレッドはブレークポイント1で停止しました」と言う。ブレークポイントを削除するか(簡単にCommand + 6を押して見つけます)、ブレークポイントを無効にしてください。 – NJones

答えて

1

あり、これを行うには多くの方法がありますが、私は、これは最も理解しやすいかもしれないと思う:

-(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 > 10) return NO; 
    return YES; 
} 

最初のセクションでは、基本的に「0」の間でない文字のための非空の文字列をチェックし、 " 9 'が新しい文字列内のどこかを見つけたら、編集を拒否します。 2番目は、編集が完了した場合のテキストの長さを決定し、それが高い場合は編集を拒否します。関数がすべてのテストに合格した場合、編集は許可されます。

私は私のテキストフィールドをクリックするまで、私のビルドに問題がない

...しかし 私は" thread stopped at breakpoint 1 "

あなたは明らかにあなたのtextField:shouldChangeCharactersInRange:replacementString:方法でブレークポイントを設定していると述べて緑色の矢印警告が表示されます。 (行番号列の青い矢印)そして、あなたは彼らが右に描かれるボタンで有効になっているかどうかを切り替えることができます:彼らはこのようになり、ブレークポイントを使用して慣れていない場合は

enter image description hereenter image description here

ブレークポイント非常に便利で、私はあなたがそれらを使用することを学ぶことをお勧めします。ただし、ブレークポイントをクリックしてドックからのアイコンのように列からドラッグするか、そのオプションをオフにするだけです。

+0

すごくシンプルなので、私はそれを見る...私はそのようにしたことはありませんでした。私はupvoteできることを望む!それは完璧に動作し、私はブレークポイントを読んでいます。ありがとう! –

関連する問題