2

私のプロジェクトでは、a の長さUITextFieldを 6 文字に制限する必要があります。これはまったく問題なく動作しています。編集を終了して再度編集を開始し、バックスペースをクリックすると、アプリケーションがクラッシュします。

コードは次のとおりです。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{   
    NSUInteger newLength = [txtLicense.text length] + [strNumber length] - range.length;
    return (newLength > 6) ? NO : YES;
}
4

4 に答える 4

5

これを試して。

- (BOOL)textField:(UITextField *)inputTextField shouldChangeCharactersInRange (NSRange)range replacementString:(NSString *)string
{
   return (textField.text.length >= 5 && range.length == 0) ? NO : YES;
}
于 2011-06-28T11:14:26.587 に答える
2

次のようにデリゲート メソッドを実装します。</p>

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    NSString * toBeString = [textField.text stringByReplacingCharactersInRange:range
                                                                    withString:string];

    return ([toBeString length] > 6) ? NO : YES;
}

結果の文字列がどうなるかを取得し、その長さを確認します。この方法では、バックスペースが機能します。

于 2011-06-28T11:13:02.530 に答える
1

UITextField で最大長の検証を実現したい場合は、私の作業プロジェクトの 1 つから次の作業コードを使用できます。

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string 
{
    if ([textField.text length] > 6) {
        textField.text = [textField.text substringToIndex:6];
        return NO;
    }
    return YES;
}
于 2011-06-28T11:13:23.697 に答える
0

ここで何を達成したいのかよくわかりませんが、これを試すことができます:

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
 if (string && [string length] && [textField.text length] <= 6) {
 return NO;
 }
 
 return YES;
}
于 2011-06-28T11:12:57.517 に答える