2

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

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

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

4 回答 4

4

我自己试过了,确实如此,该方法被调用了两次,参数完全相同。阅读文档并没有说明任何内容,因此它可能只是一个错误。

你能忽略它吗?

于 2013-09-24T09:26:44.910 回答
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
    }
}
于 2014-02-28T17:31:41.420 回答
0

我有同样的问题,我通过创建一个 ivar 解决了它......这对我有用,因为我在调用它后重新加载了我的表,并textDidClear = NO;在我的 reloadTable 方法中重置。

- (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];
    }
}
于 2014-12-29T03:51:25.173 回答
0

当您在模拟器中工作并在搜索栏中使用计算机键盘键入时,有时会调用两次该方法

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)newText.

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

于 2015-06-30T10:15:13.247 回答