2

L'iPhone SDK 3.0 a cette nouvelle classe pratique "UISearchDisplayController" qui facilite la création d'une barre de recherche, la gestion de toutes les entrées utilisateur et l'affichage du Résultats de la recherche.Comment implémenter une barre de recherche qui reste toujours en haut à l'aide de UISearchDisplayController dans iPhone SDK 3.0

Je l'utilise pour ma nouvelle application, mais il y a une chose que je voudrais changer:

Par défaut, la barre de recherche devrait être mis en haut de la UITableView qui affiche les résultats de recherche. Ainsi, lorsque vous faites défiler la liste des résultats, la barre de recherche disparaît. Ce que je voudrais accomplir est d'avoir la barre de recherche toujours sur le dessus et lors du défilement de la TableView, la barre de recherche devrait rester où elle est. (Raison de ceci: dans mon application il y a parfois beaucoup de résultats de recherche, donc parfois l'utilisateur doit faire défiler un peu de temps, et quand il réalise qu'il doit changer sa chaîne de recherche, je ne veux pas le forcer à faites défiler le chemin du retour)

ce que je l'ai déjà fait ajoute la barre de recherche à la vue de la UINavigationController qui est la « vue parent » de mon point de vue de la table, au lieu d'ajouter à la vue de la table directement:

MyAppDelegate *delegate = [[UIApplication sharedApplication] delegate]; 

searchBar = [[UISearchBar alloc] init]; 
searchBar.delegate = self; 

[searchBar sizeToFit]; 
CGFloat searchBarHeight = [searchBar frame].size.height; 
CGRect mainViewBounds = delegate.navController.view.bounds; 
[searchBar setFrame:CGRectMake(CGRectGetMinX(mainViewBounds), 
          CGRectGetMinY(mainViewBounds) + 20, 
          CGRectGetWidth(mainViewBounds), 
          searchBarHeight)]; 
searchBar.autoresizingMask = UIViewAutoresizingFlexibleWidth; 

[delegate.navController.view addSubview: searchBar]; 

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar: searchBar contentsController: self]; 
searchDisplayController.searchResultsDataSource = self; 
searchDisplayController.searchResultsDelegate = self; 

... mais ici mon problème est, que la vue de la table reste derrière la barre de recherche, et il y a toujours le premier TableViewCell des résultats de la recherche, qui est caché derrière ma barre de recherche.

Existe-t-il un moyen de redimensionner l'UITableView de mon UITableViewController de manière permanente, de sorte qu'il commence juste sous la barre de recherche? Et il y a un autre problème: chaque fois que je touche la barre de recherche, le UISearchDisplayController cache automatiquement la barre de navigation et redimensionne le UITableView (il s'étend au début), donc je pense qu'à ce stade, le UISearchDisplayController aura un gros problème avec mon TableView personnalisé taille ...

Merci beaucoup pour toute aide!

Répondre

2

Je n'ai pas de solution au sommet de ma tête - mais je dirais que la préoccupation que vous avez semble minimisée par la possibilité pour l'utilisateur de simplement appuyer sur le haut de l'écran et d'avoir le zoom de la table top (pour changer les termes de recherche si c'est faux).

+0

Merci pour votre réponse! En attendant, je me suis rendu compte que lors de la saisie d'un terme de recherche, UISearchDisplayController verrouille automatiquement l'emplacement de la barre de recherche et redimensionne la vue de la table des résultats ... c'est donc exactement ce que je voulais atteindre ... – xoconoxtle

1

Ma solution générale pour avoir des bits sur la page que je ne veux pas faire défiler, est d'avoir l'UITableView à l'intérieur de une autre vue. Cette vue extérieure contient deux choses: une barre en haut et une table légèrement plus courte que la pleine page en dessous.

0

@interface:

UISearchDisplayController <UISearchBarDelegate> *searchDisplayController; 

@implementation:

searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar: searchBar contentsController: self]; 

searchDisplayController.delegate = self; 
searchBar.delegate = searchDisplayController; 
searchDisplayController.searchResultsDataSource = self; 
searchDisplayController.searchResultsDelegate = self; 
0

Mettez ce code dans votre TableViewController:

self.tableView.frame = CGRectMake(0,searchDisplayController?.searchBar.bounds.size.height,320,480); 
Questions connexes