2010-08-09 5 views
7

Voici mon dernier problème avec le SDK iPhone.Comment faire pour que la barre d'étendue UISearchBar soit toujours visible?

J'ai un UISearchBar et son délégué tous mis en place. Aussi, quand je charge mon avis, j'appelle

self.searchDisplayController.searchBar.showsScopeBar = YES; 

De cette façon, quand mon avis est d'abord présentée, je vois la barre de portée, comme prévu. Mais si vous touchez à l'intérieur de la barre de recherche puis à l'extérieur (ou même si vous effectuez une recherche puis annulez la recherche), la barre d'étendue est à nouveau masquée. Donc, ma question est la suivante: est-il possible que la barre d'étendue soit toujours visible? Même après avoir effectué des recherches?

Merci beaucoup.

Répondre

10

Le UISearchDisplayController cache la barre d'étendue pour vous.

La façon de contourner cela est la sous-classe UISearchBar et passer outre la mise en œuvre de setShowsScopeBar:

@interface MySearchBar : UISearchBar { 

} 

@end 

@implementation MySearchBar 

- (void) setShowsScopeBar:(BOOL) show 
{ 
    [super setShowsScopeBar: YES]; // always show! 
} 

@end 

Ensuite, dans Interface Builder, changer la classe de la barre de recherche que vous avez dans votre point de vue (qui est associé à la UISearchDisplayController) au nouveau type de classe - MySearchBar dans cet exemple.

+0

Vous penseriez que l'une des méthodes UISearchDisplayDelegate vous permettrait un emplacement pour remplacer le masquage de la barre d'étendue - mais rien de ce que j'essayais là ne fonctionnerait. Sous-classe UISearchBar fait le travail. – dodgio

+4

Alors que cela fonctionne initialement, après avoir cliqué sur searchBar puis annulé la recherche dans iOS7, la barre d'étendue est alors masquée. Je ne peux pas trouver un moyen de le coder dans iOS7 pour réafficher la barre de portée après que le UISearchDisplayDelegate le cache. Connaissez-vous un moyen? – msec

Questions connexes