2015-04-23 6 views
10

Mam problem z kontrolerem UISearch, gdzie jeśli mam tekst na pasku wyszukiwania i odrzucam VC, to pasek wyszukiwania nie zniknie i pozostanie na ekranie zachodzenie na siebie w innych VC. Następnie ulega awarii, jeśli naciśniesz przycisk anulowania.UISearchController nie odrzuci paska wyszukiwania i nakładania się na iOS 8 Swift

Próbowałem kilku rozwiązań na SO, ale żaden z nich nie zadziałał. :/

self.resultSearchController = ({ 
     let controller = UISearchController(searchResultsController: nil) 
     controller.searchResultsUpdater = self 
     controller.dimsBackgroundDuringPresentation = false 
     controller.hidesNavigationBarDuringPresentation = false 
     controller.searchBar.sizeToFit() 

     controller.searchBar.searchBarStyle = UISearchBarStyle.Minimal 
     controller.searchBar.barTintColor = UIColor(red: 243/255, green: 243/255, blue: 243/255, alpha: 1) 
     controller.searchBar.tintColor = UIColor.blackColor() 

     controller.definesPresentationContext = true 
     controller.edgesForExtendedLayout = UIRectEdge.None 
     self.tableView.contentInset = UIEdgeInsetsMake(64, 0, 0, 0) 

     self.tableView.tableHeaderView = controller.searchBar 

     return controller 
    })() 

Naprawdę doceniam każdą pomoc w tej sprawie!

AKTUALIZACJA: Tak więc znalazłem niezbyt świetne rozwiązanie, które ma ustawić .active = false w viewWillDisappear. Jednak problem polega na tym, że artefakt SearchBar będzie wyświetlał się na następnym/poprzednim VC przez sekundę, zanim całkowicie zniknie.

Odpowiedz

15

zmienić następujące:

controller.definesPresentationContext = true 

do

self.definesPresentationContext = true 

Ustawienie zachowuje również stan paska wyszukiwania po naciśnięciu i pop kontroler widoku i wyłączania stosu nawigacji.

Możesz przeczytać o ustawieniu definesPresentationContext na Apple's Documentation on UIViewController.

+0

WOW. DZIĘKUJĘ CI. –

+1

Uratowałeś mój dzień. Dzięki – masgar

+0

Dziękuję. Nie znałem tej metody. self.definesPresentationContext = true – Alexander

0

Jeśli możesz użyć self.definesPresentationContext = true, prawdopodobnie jest to lepszy sposób na zrobienie tego. W mojej konfiguracji naprawiałem kolejny błąd za pomocą UISearchController, ustawiając definesPresentationContext na false.

Zamiast więc przeszedłem z wywołaniem

- (void)viewWillDisappear:(BOOL)animated 
{ 
    [super viewWillDisappear:animated]; 
    [self.searchController setActive:FALSE]; 
} 

do:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{ 
    [super prepareForSegue:segue sender:sender]; 
    [self.searchController setActive:FALSE]; 
} 

i wydawało się, że rade.