2015-10-22 4 views
5

verursacht ich habe ein seltsames Problem in iOS 9 mit Swift 2.0. Ich habe UISearchController in meinem tableViewController aber es verursacht ein seltsames schwarzen Bildschirm Problem. Wenn ich die Suchleiste drücke und etwas schreibe, zeigt es meine gefilterten Ergebnisse ohne Probleme an, aber wenn ich auf eine andere Tab-Leiste wie Lesezeichen tippe und danach tableViewController tappe, was Most Angesehen ist, zeigt es wieder schwarzen Bildschirm wie Screenshot .UISearchController Swift schwarzen Bildschirm 2.0

Es ist mein 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() 
    } 
} 

Dies ist das schwarze Bildschirm Bild von iOS 9 Simulator wie echtes Gerät. enter image description here

Ich denke, dass es meine TableView deiniting, wenn ich die searchBar antippen und es nicht erneut initiieren kann. Ist das ein Fehler oder etwas?

Wie kann ich dieses Problem lösen?

Vielen Dank!

Antwort

20

Freund, in Ihrem viewDidLoad() Einsatz dieser Code Zeile:

self.definesPresentationContext = true 

Sehen Sie, wie ich setzen (Linie 29):

click here to see

+0

Das ist der Trick, denke ich. Ich habe das Black-Screen-Problem dank dir gelöst! – emresancaktar

+0

Funktioniert wie Magie. Danke. Was bedeutet dieses Eigentum? – fnc12

+0

Genius :) Es funktioniert tatsächlich. Vielen Dank – Albert

0

ich konfrontiert vor kurzem das gleiche Problem und ich konnte es beheben leicht. self.definesPresentationContext = true wurde bereits in viewDidLoad() definiert, aber es dieses Problem nicht gelöst haben.

In der obigen Frage, möglicherweise zeigen Sie CitiesTableViewController direkt, wenn Sie tippen MostViewed Tabbar Element.

Um den schwarzen Bildschirm zu vermeiden, können Sie CitiesTableViewController in einem UINavigationController einbetten und versuchen, den Navigationscontroller beim Antippen des Tabbar-Elements anzuzeigen.

wird diese Lösung des schwarzen Bildschirm Problem vermeiden.