单击UISearchbar中的“清除”按钮时,textDidChange方法调用两次

时间:2013-09-24 09:12:29

标签: ios uisearchbar

我正在使用iOS7我有一个搜索栏。我正在使用textDidChange方法来获取每个字符并处理我的代码,当我们有文本时,我已经清除了“X按钮”。在以前的版本中单击清除按钮 textDidChange 方法被调用一次,我们曾经在那里处理代码。

但是在iOS7中,单击清除按钮时会调用此方法两次,此行为我可以在示例代码中看到

  • (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {

4 个答案:

答案 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

要避免此问题,您必须使用模拟器键盘。 看起来它是一个模拟器错误。