2012-02-27 16 views
0

私は、インターネット上で利用可能な多くのコードでtextFieldを制限しようとしていましたが、運がありません。これはSTIL私のテキストを制限するものではありませんxcode 4.2.1 - TextFieldでの文字の長さの制限

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

:私は

textField.delegate = self;私のviewDidLoad

で私のヘッダファイルでUIViewController<UITextFieldDelegate>を追加し、私の.mファイルに次fundtionを実装している

フィールド。何か案が?

+1

[iPhone SDK:Set Max Character length TextField]の複製可能(http://stackoverflow.com/questions/433337/iphone-sdk-set-max-character-length-textfield) – Ilanchezhian

+0

あなたは何をしようとしましたか?それをデバッグする?あなたは '[newString length]'のロギングを試しましたか? – dbrajkovic

+0

私はシミュレータを使用します。カスタムメイドのキーボードから文字を入力してください – Adeeb

答えて

2

はそれがthis

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string { 
    NSUInteger newLength = [textField.text length] + [string length] - range.length; 
    return (newLength > 5) ? NO : YES; 
} 
01の正確な複製されているとして、次のようにしないでください消え素敵な効果を保持します
+0

私はやったがまだ動作しません。 – Adeeb

0

置換文字列は、文字列全体ではなく、1文字だけが押されているので、現在のtextfield.textにそれを追加する必要があります。 (単語を貼り付けた場合またはそれ以上)あなたのカウントは、おそらく常に1である

+0

申し訳ありませんが分かりません! – Adeeb

+0

あなたのニューストリングには、入力された新しい文字のみの置換文字列しか含まれていないので、常に1文字です。 newstringにtextfield.textを追加して、完全な文字列を取得することをお勧めします。多分stringwithformatで:@ "%@%@"、textfield.text、replacementstring];それを数える。 – Darren

0

私は私のコードでこれを実装し、それが動作します:

このコードは、すべての文字数字だけを受け入れるを排除する、しかし、のような私は文字を削除あなたは長さ5の上にそのすべてを削除することができ、それが表示され、

- (void)textFieldDidBeginEditing:(UITextField *)textField { 
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(textChanged:) name:UITextFieldTextDidChangeNotification object:textField]; 
} 


- (void)textChanged:(NSNotification *)textField { 
    NSString *text = [[textField object] text]; 
    NSString *last = [text substringFromIndex:[text length] -1]; 
    NSArray *accept = [NSArray arrayWithObjects:@"0", @"1", @"2", @"3", @"4", @"5", @"6", @"7" , @"8", @"9", @".", nil]; 

    for (int i=0; i<[accept count]; i++) { 
     NSLog(@"%@", [accept objectAtIndex:i]); 
     if (![last isEqualToString:[accept objectAtIndex:i]]) { 
      [[textField object] setText:[text substringToIndex:[text length]-1]]; 
     } 
    } 
} 
+0

このコードでは制限サイズが指定されておらず、デバッグ時にエラーが表示されます。範囲外のインデックスまたは範囲 – Adeeb

+0

長さが5を超えると最後の文字が削除されるかどうかを確認します – Edig

関連する問題