2010-08-01 11 views
1

J'ai intégré un UISearchDisplayController dans le fichier xib de mon contrôleur. La fonctionnalité de base que je vais faire est d'avoir la barre de recherche dans l'en-tête de la table, et un bouton dans la barre de navigation qui montre l'affichage de la recherche. Ce sur quoi je suis coincé: Lorsque l'annulation est touchée, je veux rendre la barre de recherche invisible (garder la table pour que l'index 0 soit en haut, pas la barre de recherche), mais il reste visible et je suis Je ne sais pas pourquoi (voir 3ème image). Des idées pour toujours garder la barre de recherche cachée lorsque le bouton d'annulation est touché (voir image 1).Masquer UISearchbar comme en-tête dans UITableview lorsque l'annulation est touchée

Ce que j'ai essayé:

  1. Réglage de la tableview contentOffset à 44. Ce qui fonctionne d'abord.
  2. Appel de [tableview scrollToRowAtIndexPath: ....], qui ne semble pas faire quoi que ce soit.

Répondre

2

Essayez ceci:

- (void)viewWillAppeared:(BOOL)animated 
{ 
     [self hidesSeachBar]; 
     [super viewWillAppeared:animated]; 
} 

- (void)hidesSearchBar 
{ 
     CGSize searchSize = self.searchDisplayController.searchBar.bounds.size; 
     //not complete 
     [self.tableView setContentOffset:CGPointMake(0, searchSize.height)]; 
} 

- (void) searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller 
{ 
    //Your code 

    [self.tableView reloadData]; 
    [self hidesSearchBar]; 
} 
+0

Cela a bien fonctionné pour moi. Ma seule suggestion serait de nommer la méthode à "hideSearchBar" (au lieu de "hidesSearchBar") pour plus de clarté, puisqu'il s'agit d'une commande, et ne pas interroger une valeur booléenne. – Giovanni

0

pour cacher la barre de recherche d'un UISearchDisplayController vous devez le mettre à l'état inactif. Cela reshow la barre de navigation et

Dans votre cas, vous devez vous assurer que vous adoptez le protocole UISearchBarDelegate puis:

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    [self.searchDisplayController setActive:NO animated:YES]; 
} 
+0

Cela rend la barre de recherche inactive, c'est-à-dire la même que lorsque vous appuyez sur le bouton Annuler. Et la question était de savoir comment le cacher au cas où son en-tête tableview. –

1

Réglage du contenu offset est la façon de le cacher, et vous devez faites cela lorsque la recherche est terminée. J'utilise quelque chose comme ceci:

- (void) searchDisplayControllerWillEndSearch:(UISearchDisplayController*)controller 
{ 
    [self hideSearchBar]; 
} 


- (void) hideSearchBar 
{ 
    self.table.contentOffset = CGPointMake(0, self.searchBar.frame.size.height); 
} 
2

Si vous avez déclaré votre barre de recherche comme une propriété comme celle

@property(nonatomic, retain)UISearchBar *searchBar;

vous pouvez définir

tableView.tableheader = nil;

et le remettre

tableView.tableHeader = searchBar;

lorsque vous en aurez besoin à nouveau.

0

Pour masquer la barre de recherche sur annuler, vous devez appeler UISearchBarDelegate méthode:

(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar 
{ 
    if(searchTask)[searchTask cancel]; 

    [self.searchResults removeAllObjects]; 
    [self.searchDisplayController.searchResultsTableView reloadData]; 

    //reload you table here 
} 

Merci