2009-12-16 7 views
1

Comment supprimer la superposition noire transparente qui s'anime sur la vue de la table source lorsque vous activez une UISearchBar?Supprimer la superposition transparente UISearchBar

Pouvez-vous en quelque sorte arriver au responsable UIView et mettre son alpha à 0?

Ou existe-t-il un moyen d'afficher un searchResultsTableView vide sur le dessus de la superposition noire?

+0

Pour clarifier plus. Existe-t-il un moyen d'afficher searchResultsTableView (la vue de table contrôlée par searchDisplayController pour afficher searchResults), avant qu'un utilisateur lance une recherche? OU existe-t-il un moyen de masquer la superposition noire que le searchDisplayController dessine sur la tableview de source de données d'origine? – billabel

Répondre

0

Toujours afficher certaines cellules, même s'il n'y a pas encore de résultats de la recherche. Vous pouvez accomplir cela via les méthodes habituelles UITableViewDelegate/UITableViewDataSource. Soyez prudent, car vous avez maintenant affaire à la vue de table originale, à la vue de la table de recherche et à la vue de la table de recherche avec des cellules factices, et toutes les méthodes UITableViewDelegate/UITableViewDataSource doivent en être conscientes.

+0

Comment définir UISearchDisplayControllerDelegate.searchResultsTableView pour avoir une source de données différente lors du premier chargement? Et puis passer à la source de données searchResults lorsque quelqu'un commence à chercher? – billabel

+0

Si j'étais vous, j'utiliserais la même source de données, et je vérifierais simplement si ([nombre de filtersListContent] == ​​0). Si c'est le cas, renvoyez des cellules vides (tableView height/row height) nombre de lignes par section, 1 section, et désélectionnez simplement toute ligne sélectionnée. – refulgentis

+0

En fait, maintenant que je regarde la documentation, cela peut être le seul moyen car il n'y a aucun moyen d'observer le texte dans l'UISearchBar pour les changements. – refulgentis

6
po [self.view subviews] 

(id) $1 = 0x0a3155f0 <__NSArrayM 0xa3155f0>(
<ATShadowTableView: 0xc341600; baseClass = UITableView; frame = (0 44; 320 411); clipsToBounds = YES; gestureRecognizers = <NSArray: 0xa627200>; layer = <CALayer: 0xa626d30>; contentOffset: {0, 0}>, 
<UISearchBar: 0xa618f40; frame = (0 0; 320 44); text = ''; layer = <CALayer: 0xa619040>>, 
<UIControl: 0xa329fc0; frame = (0 44; 320 455); alpha = 0.8; opaque = NO; animations = { opacity=<CABasicAnimation: 0xa32b4e0>; }; layer = <CALayer: 0xa32a060>> 
) 

Dernier objet (UIControl) dans self.subview est ce que nous voulons éliminer. Donc

- (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller 
{ 
... 
    [self performSelector:@selector(removeOverlay) withObject:nil afterDelay:.01f]; 
} 

- (void)removeOverlay 
{ 
    [[self.view.subviews lastObject] removeFromSuperview]; 
} 
+1

Cela fonctionne toujours dans iOS 7, mais il semble maintenant être un 'UISearchDisplayControllerContainerView' au lieu d'un' UIControl'. Je voudrais aussi ajouter, puisque ce n'était pas clair dans cette réponse, que la superposition apparaît dans '-searchDisplayControllerDidBeginSearch', mais doit être supprimée dans' -searchDisplayControllerWillBeginSearch' après un très court délai. Si vous le supprimez dans '-searchDisplayControllerDidBeginSearch', la superposition apparaîtra brièvement avant de disparaître à nouveau. – iMaddin

+1

Je ne suis pas d'accord, cela ne fonctionne pas sur iOS7. En effet, la superposition disparaîtra mais la vue de la table ne sera plus rechargée après un changement de texte de la barre de recherche! –

+1

J'ai réussi à faire fonctionner ceci dans iOS7 en utilisant [[self.view.subviews lastObject] setHidden: YES]; [[self.view.subviews lastObject] setHidden: NO]; aux moments appropriés. – Rammeln

Questions connexes