2010-12-06 20 views
0

Je suis tombé sur ce problème il y a longtemps, et je l'ai corrigé, mais maintenant je n'ai aucune idée de comment je l'ai fait, et je le rencontre dans un autre contrôleur.UISearchDisplayController affiche des bordures de cellule de tableau blanc au lieu de gris

J'utilise le code suivant pour rendre le clavier affiche automatiquement lorsque je montre mon avis comme une barre de recherche:

[self.rootController.changeClientViewController.searchDisplayController.searchBar becomeFirstResponder]; 
[self.rootController.changeClientViewController.searchDisplayController setActive:YES]; 

Le clavier apparaît, comme il se doit, mais les lignes entre chaque la cellule de la table est blanche, au lieu de gris foncé, et elle a l'air mauvaise. J'utilise le même code dans un autre endroit pour faire apparaître automatiquement le clavier; et là les lignes sont gris foncé comme prévu. Quelqu'un at-il rencontré cela? Je pourrais créer un lien vers une capture d'écran s'il serait utile ...

+0

Est-ce dans 'viewWillAppear:', 'viewDidAppear:' ou autre chose? – bosmacs

+0

C'est dans un contrôleur séparé (donc le long chemin pour arriver à searchBar) ... Nous l'avons essayé dans 'viewDidLoad',' viewDidAppear: ', et' viewWillAppear: 'd'abord, mais il n'élevait pas le clavier à alors tout. (Bien que dans le contrôleur où il fonctionne bien, c'est dans 'viewWillAppear:') La seule différence que je peux voir est que celui qui fonctionne est une vue modale en plein écran; alors que c'est juste une sous-vue. – GendoIkari

Répondre

2

est ici une façon de le fixer: becomeFirstResponder après un retard minuscule, à savoir

[self.rootController.changeClientViewController.searchDisplayController.searchBar 
    performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.0]; 
+0

Ok, cela a fonctionné fondamentalement ... Je devais aussi me débarrasser du 'setActive:', alors cela a fonctionné ... Toute chance que vous pourriez expliquer 1) Comment un retard de 0.0 peut-il faire quoi que ce soit? Il y a 0 retard. 2) L'autre endroit dans le code où je fais cela nécessite que 'setActive:' fonctionne correctement. Le clavier ne vient pas si je ne l'ai pas. Alors qu'ici, je dois me débarrasser de 'setActive: 'pour le faire fonctionner correctement? – GendoIkari

+0

Je crois que 'getFirstResponder' rend effectivement le contrôleur de recherche actif. En ce qui concerne le délai 0.0, même s'il est 0.0, il ne s'exécute pas immédiatement, mais il planifie un temporisateur qui sera évalué sur la boucle d'exécution par défaut. Voir cette réponse pour plus d'informations: http://stackoverflow.com/questions/1922517/how-does-performselectorwithobjectafterdelay-work – bosmacs

+0

Eh bien, je suis encore un peu perdu pour savoir pourquoi je devais faire setActive: en un seul endroit; mais n'a pas utilisé setActive: dans un autre endroit .... mais comme votre réponse m'a conduit à un endroit où mon code fonctionne comme voulu, je vais accepter. – GendoIkari