2015-10-22 6 views
5

У меня странная проблема в iOS 9 с Swift 2.0. Я добавил UISearchController в мой tableViewController, но это вызывает странный черный экран проблема. Когда я нажимаю строку поиска и пишу что-то, она показывает мои отфильтрованные результаты без каких-либо проблем, но когда я нажимаю другую кнопку панели вкладок, например Закладки, и после этого, когда я нажимаю tableViewController, который является Популярные просмотренные снова показывает черный экран, как экранный снимок ,UISearchController вызывает черный экран Swift 2.0

Есть мой tableViewController;

import UIKit 

class CitiesTableViewController: UITableViewController, UISearchResultsUpdating { 

// MARK: - Class Properties 

private var cities = [String]() 
private var veterinaries = [Veterinary]() 
private var filteredVeterinaries = [Veterinary]() 
private var resultSearchController: UISearchController! 

// MARK: - TableViewController Life Cycle Methods 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.getCitiesList() 
    self.configureResultsSearchController() 
} 

override func viewDidDisappear(animated: Bool) { 
    super.viewDidDisappear(animated) 
    self.resultSearchController.active = false 
} 

// MARK: - Configuring Search Bar Controller 

private func configureResultsSearchController() { 
    self.resultSearchController = UISearchController(searchResultsController: nil) 
    self.resultSearchController.searchResultsUpdater = self 
    self.resultSearchController.dimsBackgroundDuringPresentation = false 
    self.resultSearchController.hidesNavigationBarDuringPresentation = false 
    self.resultSearchController.searchBar.sizeToFit() 
    self.resultSearchController.searchBar.placeholder = "Klinik veya ilçe adı" 
    self.tableView.tableHeaderView = self.resultSearchController.searchBar 
} 

// MARK: - Table view data source 

override func numberOfSectionsInTableView(tableView: UITableView) -> Int { return 1 } 
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if self.resultSearchController.active { return self.filteredVeterinaries.count } 
    else { return self.cities.count } 
} 

// MARK: - Table view Delegate Methods 

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    if (self.resultSearchController.active) { 
     self.performSegueWithIdentifier(Constants.ShowDetailViewControllerSegueIdentifier, sender: nil) 
    } else { 
     self.performSegueWithIdentifier(Constants.ShowTownsTableViewControllerSegueIdentifier, sender: nil) 
    } 
} 

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier(Constants.CellIdentifier, forIndexPath: indexPath) 
    if (self.resultSearchController.active) { 
     cell.textLabel?.text = self.filteredVeterinaries[indexPath.row].name 
     cell.detailTextLabel?.text = self.filteredVeterinaries[indexPath.row].address 
     return cell 
    } else { 
     cell.textLabel?.text = self.cities[indexPath.row] 
     return cell 
    } 
} 

// MARK: - PARSE Query Methods 

private func getCitiesList() { 
    let parseQueries = ParseQueries() 
    parseQueries.downloadListData() { 
     (let parseResults) in 
     if let veterinaries = parseResults as? [Veterinary] { 
      self.veterinaries = veterinaries 
      for vet in veterinaries { 
       if let city = vet.city { 
        self.cities.append(city) 
       } 
      } 
      dispatch_async(dispatch_get_main_queue()) { 
       self.cities = HelperMethods().removeDuplicatesAndSort(array: self.cities) 
       self.tableView.reloadData() 
      } 
     } 
    } 
} 

// MARK: - UISearchController Delegate Methods 

func updateSearchResultsForSearchController(searchController: UISearchController) { 
    self.filteredVeterinaries.removeAll(keepCapacity: false) 
    if let searchBarText = searchController.searchBar.text{ 
     let searchText = searchBarText.lowercaseString 
     // Searching with Veterinary Name and Veterinary City 
     self.filteredVeterinaries = self.veterinaries.filter({$0.name?.lowercaseString.rangeOfString(searchText) != nil}) 
     self.filteredVeterinaries += self.veterinaries.filter({$0.town?.lowercaseString.rangeOfString(searchText) != nil}) 
     tableView.reloadData() 
    } 
} 

Это изображение на черном экране с симулятора iOS 9, такое же, как и у реального устройства. enter image description here

Я думаю, что он деинирует мой tableView, когда я нажимаю на searchBar, и он не может инициализировать снова. Это ошибка или что-то еще?

Как я могу решить эту проблему?

Спасибо!

ответ

20

друга, в вашем viewDidLoad() вставить этот код строки:

self.definesPresentationContext = true 

Посмотрите, как я ставлю (строка 29):

click here to see

+0

Thats the trick я думаю. Я решил проблему с черным экраном благодаря вам! – emresancaktar

+0

Работает как магия. Спасибо вам. Что это означает? – fnc12

+0

Genius :) Это действительно работает. благодаря – Albert

0

Я недавно столкнулся с такой же вопрос, и я мог бы это исправить без труда. self.definesPresentationContext = true был уже определен в viewDidLoad(), но это не решило эту проблему.

В вышеуказанном вопросе, возможно, вы показываете CitiesTableViewController непосредственно при нажатии MostViewed элемент табло.

Для того, чтобы избежать черного экрана, вы можете вставлять CitiesTableViewController в UINavigationController и попытаться показать navigationcontroller при касании элемента TabBar.

Это решение позволит избежать проблемы с черным экраном.

Смежные вопросы