8

検索バーを押すと、すでに入力されている文字列を取得したい。そのために、私は現在この方法を使用しています:

- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range     replacementText:(NSString *)text
{
    NSLog(@"String:%@",mainSearchBar.text);
    return YES;
}

しかし、それは前の文字列を返しています。たとえば、id「ジャンボ」と入力すると、ジャンボが表示され、バックスペースを押して1つのアイテムを削除して「ジャンボ」にすると、ジャンボが表示されます。つまり、検索バーの前の文字列です。

現在の文字列を取得するにはどうすればよいですか? 助けてください。ありがとう

4

5 に答える 5

13

メソッド内で、入力したテキストを次のように取得します。

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

スウィフト 3:

let newText = (searchBar.text ?? "" as NSString).replacingCharacters(in: range, with: text)
于 2012-04-15T12:06:39.540 に答える
5

新しいテキストを取得するための最も便利なデリゲートメソッドは次のとおりです。

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText

との両方[searchBar text]searchText、新しく入力されたテキストが返されます。 shouldChangeTextInRange編集をキャンセルする前にキャンセルできるため、意図的に古いテキストを報告します。

于 2012-04-15T12:39:12.833 に答える
3

試してみてください:

 - (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
    {
        NSString *str = [mainSearchBar.text stringByReplacingCharactersInRange:range withString:text];
        NSLog(@"String:%@",str);
        return YES;
    }
于 2012-04-15T12:06:51.350 に答える