searchBar textDidChange вызывается два раза, когда поле поиска записывается в UISearchBar - PullRequest
1 голос
/ 20 марта 2012

У меня есть UISearchBar, созданный программно в функции, вызываемой из viewDidLoad таким образом

//***************************************
//***  Build the UINavigationBar        *
//***************************************
- (void) buildBar {

    search = [[UISearchBar alloc] init];
    [search sizeToFit];
    search.delegate = self;
    [[search.subviews objectAtIndex:0] removeFromSuperview];

    self.navigationItem.titleView = search;

    tools = [[UIToolbar alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 110.0f, 44.01f)];
   tools.barStyle = UIBarStyleBlackTranslucent; 
    if(tools.subviews.count >0)
    {
        [[[tools subviews] objectAtIndex:0] removeFromSuperview];
    }
    NSMutableArray *buttons = [[NSMutableArray alloc] initWithCapacity:2];
    [buttons addObject:[self editButtonItem]];
    bi = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(activateActions:)];

    bi.style = UIBarButtonItemStyleBordered;

    [buttons addObject:bi];
    [bi release];

    [tools setItems:buttons animated:NO];

    [buttons release];

    UIBarButtonItem *tollbarButtons = [[UIBarButtonItem alloc] initWithCustomView:tools];

    self.navigationItem.rightBarButtonItem = tollbarButtons; 

    [tollbarButtons release];

 //   [tools release];
//    [search release];
}

когда я нажимаю на поле поиска, мой делегат [searchBar textDidChange] вызывается два раза, и я не могу понять, Это происходит только в первый раз, когда пользователь нажимает на поле поиска, это нормальный ответ ?. услышать код

-(void) searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {
      if([searchText length] == 0 && firstTimeSearch == NO ){
          firstTimeSearch = YES;
          [filterCalls removeAllObjects];
          [filterCalls addObjectsFromArray:allCalls];

/*          [searchBar performSelector: @selector(resignFirstResponder) 
                          withObject: nil 
                          afterDelay: 0.1];*/
    }
    else{
          firstTimeSearch = NO;
          [filterCalls removeAllObjects]; 
        [filteredCallsDetails removeAllObjects];

 //        
          int i = 0;
          for(NSDictionary *call in callsDetails ){

//              NSNumber *callId = [call objectForKey:@"CallID"];

              generalUtils *gu = [[generalUtils alloc]init];
              NSArray *callDetail = [[NSArray alloc]initWithArray:[gu getFilteredCallDetails:i :filterCalls :filteredCallsDetails]]; 

              for (NSDictionary *answer in callDetail) {
                  NSRange r = [[answer objectForKey:@"answer"] rangeOfString:searchText options:NSCaseInsensitiveSearch];
                  if(r.location != NSNotFound){

                      [filterCalls addObject:call]; 
                      [filteredCallsDetails addObject:callDetail];                  }

              }

              i++;
        }
    }
       [self.tableView reloadData];
}

Я работаю в xCode 4.3.1 я знаю, что у меня есть необъяснимый код в этой функции, но даже когда я замечаю его, он по-прежнему вызывается два раза, пытаясь решить его, но не может оштрафовать Y будь счастлив получить помощь

1 Ответ

1 голос
/ 20 марта 2012

Использование

 - (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar 

вместо

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