Résultat des recherches de UISearchDisplayController a une autre disposition de la cellule et le comportement que la table recherchée

StackOverflow https://stackoverflow.com/questions/8333532

Question

J'utilise storyboard. J'ai un UITableView avec une cellule prototype. Cette cellule est de style « sous-titre ». J'ai ajouté un Segue de la cellule à la vue détaillée. Ainsi, lorsque l'utilisateur tape une cellule, il ouvre l'éditeur correspondant ... Tout cela fonctionne très bien.

Maintenant, j'ai ajouté un UISearchDisplayController d'un UISearchBar, mis à exécution les délégués. Cela fonctionne très bien.

Mais dans le tableau des résultats de recherche les cellules sont de style « par défaut » et ne sont pas tapable. Que dois-je faire pour obtenir une table de résultats à la recherche et de se comporter comme la table « fouillé »?

Était-ce utile?

La solution 2

Trouvé le problème ...

La méthode

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

tiré la cellule du tableView, qui est dans le cas de résultat pas tableView du story-board mais le resultTableView du SearchDisplayController.

je reçois maintenant la cellule à l'affichage dans les deux cas de la vue de la table dans le story-board et maintenant il fonctionne.

Autres conseils

Je voudrais contribuer à répondre # 1 est ce que je l'ai fait et ça a marché pour moi

dans le procédé

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

au lieu d'attribuer la cellule à partir du paramètre tableView

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

lui attribuer directement à partir du TableView sur la vue que vous devez remplacer

// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

avec cette

 UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:CellIdentifier];

Je l'ai utilisé ios 7.0 et Xcode 5.0. J'ai trouvé que le contrôleur d'affichage de recherche utilise la même disposition tableview que le contrôleur de vue des délégués. Tout ce que vous avez à faire est juge si le tableview actuel est le tableview de la vue délégué contrôleur ou le tableview du contrôleur d'affichage de recherche. Mais rappelez-vous d'ajouter la phrase

tableView.rowHeight = self.tableView.rowHeight;

dans l'extrait de code suivant:

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (tableView == self.searchDisplayController.searchResultsTableView)
{
    tableView.rowHeight = self.tableView.rowHeight;//very important!
    return [self.searchResults count];
}
else
{
    ...
    return ...;
}
}

si vous oubliez de mettre en œuvre cette phrase, la ligne de la vue de la table de l'affichage de recherche est seulement aussi haut que ligne par défaut, ce qui vous fait penser qu'il ne ressemble pas à la table « fouillé ».

Il y a une réponse possible à cette . Il ne peut pas tout à fait pour vous, mais comme je l'ai expliqué, la UISearchDisplayController crée la vue de la table.

Consultez la documentation et vous pouvez obtenir une meilleure compréhension de celui-ci, mais il est dit:

Vous initialiser un contrôleur d'affichage de recherche avec une barre de recherche et contrôleur de vue responsable de la gestion du contenu original pour être cherché. Lorsque l'utilisateur lance une recherche, le contrôleur d'affichage de recherche est responsable de superposant l'interface de recherche sur la point de vue de contrôleur de vue original et montrant les résultats de la recherche. le les résultats sont affichés dans une vue de table qui est créé par la recherche Contrôleur d'affichage. En plus du contrôleur de vue original, il sont logiquement quatre autres rôles. Ceux-ci sont généralement tous joué par le même objet, souvent le contrôleur de vue original lui-même.

Dans mon cas UISearchDisplayController utilisait type de cellule à droite (sur mesure), mais la hauteur de la cellule était mal si je devais utiliser

(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 

méthode pour fixer.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top