2009-08-11 7 views
4

Mon objectif est d'avoir un UISearchBar corrigé dans une vue juste au-dessus d'un UITableView. Lorsque je l'ai configuré dans IB et que je l'ai créé, la vue de la table se développe pour remplir toute la fenêtre et la barre de recherche n'est pas visible. Si je fais de UISearchBar une sous-vue de UITableView, la barre de recherche s'affiche comme prévu, mais ce n'est pas ce que je veux. Ce que je suis après, c'est que, après que l'utilisateur sélectionne une ligne, je veux afficher une vue détaillée avec la barre de recherche restant sur l'écran. J'ai donc pensé qu'il devait être une sous-vue distincte, pas une partie de la table. Pour une raison quelconque cependant, je ne peux pas la barre de recherche pour afficher quand c'est simplement une sous-vue en dehors de la table.Impossible d'afficher UISearchBar à moins d'être dans une vue de table

Répondre

5

Vous devez le faire par programmation. Voici ce que j'ai fini par faire. Ajoutez d'abord ce qui suit au fichier .h de votre ViewController. Ensuite, placez ce code dans la méthode viewDidLoad de mon RootViewController. Ensuite, placez ce code dans la méthode viewDidLoad de mon RootViewController.

self.mySearchBar = [[[UISearchBar alloc] 
      initWithFrame:CGRectMake(0.0, 64.0, self.view.bounds.size.width, 
      44.0)] autorelease]; 
    self.mySearchBar.delegate = self; 
    self.mySearchBar.showsCancelButton = YES; 
    self.mySearchBar.hidden = YES; 
    self.mySearchBar.tintColor = [UIColor lightGrayColor]; 
    [self.navigationController.view addSubview: self.mySearchBar]; 

Vous devrez peut-être également ajouter quelque chose comme ceci pour empêcher le searchBar d'être au-dessus de votre tableView.

self.tableView.frame = CGRectMake(0.0, 44.0, 320, 324); 

Dans mon cas, searchBar est resté dans la vue lorsque j'ai effectué une exploration détaillée. Je devais appeler:

self.mySearchBar.hidden = YES;` 

Dans mon didSelectRowAtIndexPath pour se débarrasser de lui quand je clique sur une cellule.

+0

Merci Jonah. Cela m'a amené où je dois aller! – skantner

1

Cela ne fonctionne pas avec UITableViewController. Voici ce qui vous donnera le comportement désiré:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{ 

    return search; //in .h, IBOutlet UISearchBar* search; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section { 

    return 44; 
} 
+0

Salut Poitr. Besoin d'un peu plus d'informations sur la façon dont cela correspond au code ci-dessus ou si cela ne fonctionne pas du tout. J'essaye de faire ça maintenant. Merci. Faites-vous cela dans un autre contrôleur ou dans le TVC? –

+0

Hmmm, Piotr cela met juste la barre de recherche dans l'en-tête, ce qui n'est pas bon si vous prévoyez d'utiliser quoi que ce soit dans l'en-tête. –

+0

Oui, et plutôt que d'utiliser la vue de recherche tout de suite, vous pouvez à la place construire UIView contenant la recherche et tous les autres éléments. –

Questions connexes