1

私は自分の:コードUISearchBarで実装したものを持っています。viewDidLoadも設定しましたUISearchBarDelegate

ここで、ユーザーが5つ以上の文字を入力できないように制限したいので、このデリゲートメソッドを実装します

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{

    NSLog(@"shouldChangeTextInRange");

    if (searchBar.text.length >= 5)
        return NO;

    return YES;
}

その正常に動作します。

問題は、最大5文字を入力して、キーボードのバックスペース文字を使用しようとすると、機能しないことです。

また、キーボードの検索ボタンを押しても、searchBarSearchButtonClicked:が呼び出されません。

私は現在使用しています

XCodeバージョン:3.2.5

iOS SDK:4.2

4

2 に答える 2

2

実際のテキストの長さではなく、新しいテキストの長さ (提案されたテキストの変更が適用された場合のテキストの長さ) でテストを行う必要があります。

そのためには、まず新しいテキストを計算する必要があります:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
    if ([text isEqualToString:@"\n"])
        return YES; // accept validation button

    NSString* newText = [searchBar.text stringByReplacingCharactersInRange:range withString:text];

    if (newText.length >= 5)
        return NO;

    return YES;
}
于 2011-09-06T09:03:02.113 に答える
0

コードが原因で、バックスペースを使用できません。5文字を入力した後、検索バーが動かなくなります。代わりに使用してください:

    if ([textField.text length] + [string length] - range.length > 5) {
        return NO;
    }
于 2011-09-06T09:03:25.193 に答える