如何在键入时获取当前的搜索栏字符串

时间:2012-04-15 12:00:55

标签: iphone objective-c xcode ios5

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

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

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

我该怎么做才能获得当前的字符串? plsease帮助。 感谢

5 个答案:

答案 0 :(得分:13)

在方法内,您可以输入以下内容:

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

斯威夫特3:

let newText = (searchBar.text ?? "" as NSString).replacingCharacters(in: range, with: text)

答案 1 :(得分:5)

从中检索新文本最方便的委托方法是:

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

[searchBar text]searchText都会返回新输入的文字。 shouldChangeTextInRange故意报告旧文本,因为它允许您在编辑发生之前取消编辑。

答案 2 :(得分:3)

尝试:

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

答案 3 :(得分:1)

Swift 3版本:

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

只要文本在搜索栏中发生变化,就会触发。

答案 4 :(得分:0)

Swift 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
    }