8

在按下搜索栏时,我想获取已经输入的字符串。为此,我目前正在使用这种方法:

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

但它正在返回前一个字符串。例如,我输入“jumbo”,它显示 jum,当我按退格键删除一项并使其“jumb”时,它显示 jumbo。即搜索栏上的前一个字符串。

我应该怎么做才能得到当前的字符串?请帮忙。谢谢

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 回答
1

斯威夫特 3 版本:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String){
    print("searchText: \(searchText)")
}

只要搜索栏中的文本发生更改,就会触发。

于 2016-12-04T23:50:46.030 回答
1

斯威夫特 4.2

func searchBar(_ searchBar: UISearchBar, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
        let newString = NSString(string: searchBar.text!).replacingCharacters(in: range, with: text)

        return true
    }
于 2019-03-08T07:24:29.470 回答