Question

I ai un contrôleur de gestion de plusieurs contrôleurs UITabBar (en utilisant SDK 3.0). L'un d'entre eux est un contrôleur tableView et je dois fournir une capacité de recherche en utilisant les UISearchDisplayController. Tout mon code est basé sur exemple d'Apple TableSearch. Cependant, lorsque vous cliquez sur l'onglet, le contrôleur tableView apparaît montrant son contenu lié, mais pas SearchBar apparaît. J'ai vérifié l'IB dans xib pour vous assurer que tous les points de vente sont correctement réglés, mais peu importe ce que j'essaie self.searchDisplayController est toujours nul et la barre de recherche ne semble pas.

Dans la pratique j'ai reproduit MainView.xib de l'exemple TableSearch et définir la classe de fichier propriétaire à la classe de contrôleur correct pour l'onglet. Les points de vente sont des ensembles comme dans l'exemple MainView.xib. Est-ce que je manque une étape importante ou faire quelque chose de mal?

Je vous remercie à l'avance.

Était-ce utile?

La solution 3

Ok, je l'ai trouvé comment le résoudre. Dans mon cas, le problème était dû au fait que je travaillais avec un contrôleur intégré dans le UITabBarController comme l'un de ses onglets gérés (à savoir comme un enfant).

Retrait du contrôleur du UITabBarController, puis en ajoutant un UINavigationController au lieu UITabBarController, et enfin mettre mon contrôleur comme un enfant du UINavigationController complètement résolu la question.

Je ne comprends pas pourquoi il en est ainsi (il n'y a pas d'information connexe dans la documentation, comme cela arrive souvent); cependant, il travaille maintenant comme un charme. En ce qui concerne la nature.

Autres conseils

J'ai eu le même problème et est arrivé à tomber par hasard sur cette solution ...

Si vous avez votre contrôleur de vue de la table (par exemple. UISearchDisplayController) niché dans un contrôleur barre d'onglets ou Navigation à l'aide d'Interface Builder, vous devez définir le « Nom Nib » dans la fenêtre « Attributs Inspecteur ».

Le nom Nib sera celui qui détient la vue de la table, et le contrôleur (par exemple. UISearchDisplayController) en tant que propriétaire du fichier.

Moi aussi j'ai ce problème :( est la barre de recherche se cache derrière le tableview?

@unforgiven, avez-vous essayé ce ...?

searchBar = [[UISearchBar alloc]initWithFrame:CGRectMake(0, 0, 320, 40)]; 
[self.tableView setTableHeaderView: searchBar];

Cela crée manuellement une barre de recherche et cela fonctionne. Mais je fais une erreur stupide IB que le SearchBar ne se présente pas, même si mes connexions sont parfaits. : - (

Faites mettre à jour ce post si vous avez la réponse ...

J'ai eu un problème similaire

Pour résoudre je devais faire une étape supplémentaire pour répondre unforgivens Dans ma principale nib

1) créer un UITabController 2) Ensuite, je traînais un contrôleur UINavigational dans le contrôleur onglet 3) ont ensuite traîné un UITableViewController dans le NavigationalController comme un enfant 4) Ensuite changé (3) classe pour être mon MyTableWithSearchBarViewController dans l'inspecteur - vérifier si le nom est correct et nib changer si nécessaire dans l'inspecteur et 5) I eu alors de supprimer le tableView qui est automatiquement créé par IB dans l'étape (3). Alors seulement, correctement la barre de recherche spectacle ...

Si à l'étape 3, je traînés un contrôleur différent sur la scène ou la gauche tableView il n'y afficher que jamais la table et non la barre de recherche

bizarre

Tomtrapeze a la bonne réponse si votre fichier contient le nib UITableViewController. Mais, si vous chargez le UITableViewController dans le code - comme pousser sur la pile d'un UINavigationController - la solution est un peu différent.

Lors de l'initialisation du UITableViewController ou sous-classe, vous devez utiliser le -initWithNibName: bundle: sous forme de initialiseur et indiquez le nom de votre fichier nib. Alternativement, vous pouvez utiliser la norme -initWithStyle. Initialiseur et définir manuellement la propriété nibName avant que la vue est chargé

Si la propriété nibName est pas défini lorsque la vue se charge, UITableViewController ne sera pas utiliser la logique de recherche normale nib UIViewController. Il suffit de charger un UITableView standard au lieu.

J'ai récemment appris que je pouvais charger des fichiers NIB avec [[MyViewController alloc] initWithNibName:nil bundle:nil]; lorsque le fichier NIB a le même nom que la classe (à savoir MyViewController.xib). Il se trouve que l'initialisation de cette façon provoque de ne pas afficher le « UISearchBarandUISearchBarDisplayController`. Quand je l'initialisation du contrôleur de vue en fait de taper le nom de la classe, ma barre de recherche a montré correctement. Je pensais d'abord qu'il avait quelque chose à voir avec la façon dont je présentais le contrôleur de vue, mais était heureux que ce n'était pas.

PGWSearchViewController *searchVC = [[PGWSearchViewController alloc] initWithNibName:@"PGWSearchViewController" bundle:nil];

searchVC.modalPresentationStyle = UIModalPresentationFullScreen;
searchVC.modalTransitionStyle = UIModalTransitionStyleCoverVertical;

[self presentViewController:searchVC animated:YES completion:^{ }];

est d'utiliser iOS SDK 5.1 et Xcode 4.3.1.

Une autre solution possible qui fonctionne pour moi est d'initialiser le UITableViewController avec initWithNibName: paquet:

SearchEntryTableViewController* searchEntryTableViewController = [[SearchEntryTableViewController alloc]initWithNibName:@"SearchEntryTableViewController" bundle:nil];

Pour imbriquer le UITableViewController dans un UINavigationController avant le mettre dans un UITabBarController ne résout pas le problème pour moi ...

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