我正在使用iOS7我有一个搜索栏。我正在使用textDidChange方法来获取每个字符并处理我的代码,当我们有文本时,我已经清除了“X按钮”。在以前的版本中单击清除按钮 textDidChange 方法被调用一次,我们曾经在那里处理代码。
但是在iOS7中,单击清除按钮时会调用此方法两次,此行为我可以在示例代码中看到
答案 0 :(得分:4)
我只是尝试了自己而且确实如此,该方法使用完全相同的参数调用两次。阅读文档时,它没有说明任何内容,因此它可能只是一个错误。
你可以忽略它吗?
答案 1 :(得分:3)
您可以创建私有财产:
@property (strong, nonatomic) NSString *searchedText;
并用它来检查是否相等:
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)newText{
if(![self.searchedText isEqualToString:newText]){
self.searchedText = [[NSString alloc] initWithString:newText];
//Do your magic
}
}
答案 2 :(得分:0)
我有同样的问题,我通过创建一个ivar来解决它...这对我有用,因为我在调用它之后重新加载我的表并在我的reloadTable方法中重置textDidClear = NO;
。
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
if (([searchText isEqualToString:@""]) && (textDidClear == NO))
{
textDidClear = YES;
[_categoryManager loadCategoriesWithToken:nil];
} else if (textDidClear == NO) {
textDidClear = NO;
[_productManager loadProductsFromSearch:searchText tokenIdent:nil];
}
}
答案 3 :(得分:0)
当您在模拟器中工作并使用计算机的键盘在搜索栏中键入时,有时会调用两次方法
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)newText
。
要避免此问题,您必须使用模拟器键盘。 看起来它是一个模拟器错误。