6

Ich habe eine Elternklasse mit Tabellenansicht und Suchleiste darüber, die eine Unterklasse von Tableview-Controller ist. Delegaten für die searchBar- und searchdisplaycontroller werden in einer separaten Klasse festgelegt, die von UISearchdisplaycontroller geerbt wird. Die Datenquelle und Delegaten für Tabellenansicht und Suchleiste werden in dieser Klasse separat behandelt. Die Klassen sind unter ARC.Kann die Suchansicht nicht schließen

Daher, wenn ein Benutzer auf Suche tippt, überträgt das Steuerelement von FilesListController (übergeordnete) Klasse in diese Klasse. Wenn nun ein Benutzer Taps auf die Schaltfläche Abbrechen, die searchbar Delegat in dieser Klasse gesetzt heißt

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar 

genannt wird, sondern dient nicht dazu, den gesamten Bildschirm searchtableview Entlassung und Rückkehr in die parent. Wenn ich diesen Delegaten jedoch nicht in die Suchklasse schreibe, funktioniert er ordnungsgemäß. Ich habe die searchbar Delegierten in xib setzen und zum Aufruf:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar 

wie folgt aus:

self.searchResultsTableView.delegate = self; 
self.searchResultsTableView.dataSource = self; 
[parentFileViewController.searchDisplayController setDelegate:self]; 

Wohin gehe ich falsch? Danke im Voraus.

+0

[Self.searchDisplayController setActive: NO anima ted: JA]; – jussi

+0

hey danke @jussi .. es funktioniert !!! Aber warum wird es nicht von selbst abgewiesen? Das ist so, als würden wir den searchviewcontroller zum Schließen zwingen. –

+0

, weil einige Informationen speichern möchten, bevor Sie den Controller abmelden. Ich werde dies als Antwort posten. – jussi

Antwort

13

Rücktritt Wenn Sie eine UISearchBar mit einem SearchBarController entlassen wollen, benutzen Sie einfach diesen Code:

[self.searchDisplayController setActive:NO animated:YES]; 
1

Sie implementieren sollten die Responder in der Delegatfunktion dh

- (void)searchBarCancelButtonClicked:(UISearchBar *) searchBar { 
     [searchBar resignFirstResponder]; 
} 
+0

Damit wird einfach die Tastatur ausgeblendet, aber die Suchansicht und die Abbrechen-Schaltfläche nicht geschlossen. –

+0

in diesem Fall hat Jussi Recht – cekisakurek

-1

Speicher Warnungen erscheinen können Während der Laufzeit der Anwendung müssen Sie davon ausgehen, dass eine Speicherwarnung auftritt und die Ansichts- und Wegwerfobjekte neu erstellt werden müssen.

Wir solche Situation sind Handling von nil unsere Arrays Einstellung:

- (void)didReceiveMemoryWarning 
{ 
[super didReceiveMemoryWarning]; 

if([self isViewLoaded] && self.view.window == nil) 
{ 
    self.view = nil; 
    keys = nil; 
    names = nil; 
    errorDuringNetworkCall = nil; 
} 
} 

Und durch die Suchleiste Tableview entlassen, bevor der Übergang Operation:

[self performSegueWithIdentifier:@"navigateToNextScreen" sender:self]; 
self.searchBar.text = @""; 
[self.searchDisplayController setActive:NO animated:YES]; 

Nach einer Speicher Warnung erhalten wird viewDidLoad Methode wird erneut aufgerufen und die Arrays sind ausgefüllt, die Suchleiste wird weiterhin nützlich sein.Work ohne Probleme

+0

Ich sehe das nicht als Beantwortung der Frage überhaupt –