在按下搜索栏时,我想获取已输入的字符串。为此,我目前正在使用这种方法:
- (BOOL)searchBar:(UISearchBar *)searchBar shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
NSLog(@"String:%@",mainSearchBar.text);
return YES;
}
但是它返回了前一个字符串。例如id我输入“jumbo”,它显示jumb,当我按退格键删除一个项目并使其“jumb”时,它显示jumbo。即搜索栏上的前一个字符串。
我该怎么做才能获得当前的字符串? plsease帮助。 感谢
答案 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
}