2015-05-05 17 views
5

Tak, obecnie próbuję zastąpić zdeplikowany searchDisplayController w jednym z moich projektów za pomocą UISearchController i jestem uruchomiony w ten problem.UISearchController odrzuca VC po naciśnięciu przycisku anulowania

Jeśli nie ma wyników w wyszukiwaniu (UITableView jest pusty), cały ViewController jest odrzucany. Nie dzieje się tak, gdy wyniki wyszukiwania nie są puste. Nie chcę wyjaśnić, że nie używam kontrolera UITableViewController. Zamiast tego mam regularny VC z UITableView w nim.

Oto niektóre z moich kodu:

var resultSearchController = UISearchController() 
override func viewDidLoad() { 
    super.viewDidLoad() 
    self.resultSearchController = ({ 
     let controller = UISearchController(searchResultsController: nil) 
     controller.searchResultsUpdater = self 
     controller.dimsBackgroundDuringPresentation = false 
     controller.searchBar.sizeToFit() 
     controller.delegate = self 
     controller.searchBar.delegate = self 
     self.studentTable.tableHeaderView = controller.searchBar 
     return controller 
    })() 
    .... 
} 

Teraz, jeśli dodać tę funkcję do równania przycisk anulować zawsze Oddala VC.

func searchBarCancelButtonClicked(searchBar: UISearchBar) { 
    resultSearchController.active = false 
} 

Więc dlaczego dokładnie ma ustawienie searchController.active = false odrzucenie VC? Czy to dlatego, że używa tego samego UITableView jako VC? Wierzę, że stary searchDisplayController wyświetlałby tylko UITableView nad tym, który jest używany. Jeśli tak, to czy istnieje sposób na zastąpienie metody dismissVC?

+0

Co się dzieje, gdy nie zawierają linię do ustawień 'active' 'false' i naciśniesz przycisk anulowania? – shim

+0

Gdy nie jest dołączony, powoduje odrzucenie VC tylko wtedy, gdy nie ma wyników wyszukiwania. Jeśli jest włączone, zawsze robi to po naciśnięciu przycisku anulowania. – boidkan

+0

Odrzuca, gdy nie ma wyników wyszukiwania, lub odrzuca, gdy nie ma wyników wyszukiwania, a użytkownik naciśnie przycisk anulowania? – shim

Odpowiedz

2

to też się ze mną dzieje. Droga go rozwiązać jest Wymiana:

resultSearchController.active = false 

z

resultSearchController.searchBar.text = "" 
    resultSearchController.searchBar.resignFirstResponder() 

Mam nadzieję, że to pomaga :-)

+0

To rozwiązanie sprawia, że ​​searchController jest nadal aktywny, co oznacza, że ​​jeśli dołączysz SearchBar do widoku stołu z włączoną funkcją odświeżania do odświeżenia, wskaźnik odświeżania nie będzie widoczny; Jako alternatywne obejście usuń istniejący pasek wyszukiwania z widoku superwizyjnego, a następnie utwórz i dołącz nowy do widoku tabeli. – Delorean

Powiązane problemy