0

J'ai un problème ennuyeux. J'ai un UINavigationController avec un UITableView dans le volet principal (gauche) de mon UISplitViewController. Quand je fais des opérations normales, les choses vont très bien au contrôleur de navigation.UINavigationController + UITableView + UISearchBar + UISplitViewController

alt text http://files.droplr.com/files/8851942/WDO5y.working.jpg

Cependant, quand je fais une recherche et faire avancer les choses sur, il est comme il ne tient pas compte de l'espace aux besoins de la barre de navigation. Il a poussé le nouveau contrôleur tout en haut, puis met la barre de navigation, chevauchant le contenu!

alt text http://files.droplr.com/files/8851942/WDRem.search.jpg

Je dois ajouter cela fonctionne très bien quand le faire en mode portrait (dans le menu contextuel) et sur l'iPhone. Est-ce un bug UISplitViewController?

Répondre

1

OK, j'ai votre réponse- [J'ai également signalé cette réponse à la question liée] -

Voici les étapes qui ont travaillé pour moi [contenant quelques pseudo-code]:

1) Depuis vous êtes en train de chercher que vous êtes déjà en train de surcharger ShouldReloadForSearch - Il suffit donc d'ajouter un morceau de code qui enregistre/stocke le forSeachString.

2) Celui-ci peut varier considérablement en fonction de votre application, mais l'essentiel pour cette étape est que vous devez effacer la chaîne de recherche stockée [définie sur null] si aucun résultat de recherche n'est chargé. Je l'ai fait dans mon UITableViewSource. J'ai 2 constructeurs: un pour l'ensemble de données complet et un autre pour l'ensemble de données filtré [résultats de la recherche]. Donc, je l'ai juste mis à null dans mon constructeur de jeu de données complet. Oui, vous pourriez le faire différemment, sans aucun doute, mais c'est comme ça que je l'ai fait.

3) Ensuite, faites comme l'état "réponse" d'origine et appelez SetActive - [self.searchDisplayController setActive:NO];. Ils ont préconisé le faire en override de ViewDidAppear. Je n'ai pas fait cela ... Je l'ai fait immédiatement après avoir poussé le suivant UIViewController dans mon override RowSelected. 4) Enfin, dans votre UIViewController qui a le UISearchDisplayController ci-joint - vérifiez votre chaîne de recherche sauvegardée et si elle existe, faites ce qui suit: 1) appelez encore SetActive MAIS cette fois avec un vrai paramètre, par exemple setActive:YES ... alors 2) définissez le texte searchBar sur votre valeur de chaîne de recherche enregistrée. Je l'ai fait dans le override ViewWillAppear.

Longue histoire courte ... cela a fonctionné pour moi ET il maintient les résultats de recherche. Définir le texte searchBar à l'étape 4 est la clé ...Cela permet au filtre de persister.

Espérons que cela aide quelqu'un

1

Je vous vois demandé il y a plus d'un mois, je ne sais pas si vous avez déjà trouvé une solution pour cela, mais j'ai rencontré le même problème et la recherche Google continue de m'amener à ce sujet. Je n'ai pas testé si ça se passe ainsi sur l'appareil car j'attends toujours le mien pour être embarqué, mais ça s'est passé comme ça dans le simulateur. J'ai une vue racine qui est une sous-classe UITableViewController avec une barre de recherche, en poussant n'importe quoi sur la pile de navigation donnera la vue soit en haut ou derrière la barre de navigation, soit en quelque sorte la position correcte mais la barre de navigation est intouchable.

Il m'est finalement apparu de mettre le contrôleur d'affichage de recherche à ne pas être actif, [self.searchDisplayController setActive:NO];, lorsque la vue disparaît en écrasant le viewDidDisappear ou le viewWillDisappear. Maintenant, tout semble avoir le bon cadre, mais vous perdez l'affichage de la recherche lorsque vous revenez en arrière. Si vous voulez je devine que vous pourriez enregistrer l'état de l'affichage de recherche en quittant puis le retourner quand revenir. Si vous avez trouvé une solution une autre solution faites le moi savoir.