5

Je utilise généralement [self.tableView setContentOffset:CGPointMake(0,40)]; afin de masquer l'UISearchBar (que j'ai défini comme en-tête de la tableView) ci-dessous le navigationBar. Tout fonctionne bien dans viewDidLoad: le searchBar est en dessous de la barre de navigation lorsque la vue est chargée. Ensuite, je mets la même ligne de codemasquer UISearchBar ci-dessous UINavigationBar après cancelButton a été appelé

[self.tableView setContentOffset:CGPointMake(0,40)] 

dans

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller 

mais il ne fait rien: la barre de recherche reste visible lorsque vous cliquez sur le bouton annuler. Qu'est-ce qui ne va pas?

Répondre

1

La méthode ci-dessous est-elle appelée à partir du thread principal?

- (void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller 

Vous pouvez vérifier comme ceci:

if ([NSThread isMainThread]) { 
    NSLog(@"Yes it is the main thread."); 
} 

Dans le cas contraire, les changements de vue ne s'inscrire à l'écran. Si vous devez modifier la vue d'un thread séparé, vous pouvez utiliser ceci:

[self performSelectorOnMainThread:@selector(XXX) withObject:nil waitUntilDone:NO]; 

Je ne suis pas sûr que ce soit votre problème, mais il est là que je commence à regarder.

4

La méthode suivante devrait le faire:

-(void)searchDisplayControllerDidEndSearch:(UISearchDisplayController *)controller{ 
    [self.tableView setContentOffset:CGPointMake(0,40)];  
} 
+0

assurez-vous d'ajouter à la UISearchBar tableview. alors seul le concept contentOffset fonctionnera. –