2016-06-04 6 views
0

Ich baue eine App, in der eine der Funktionen alle Geschäfte in der Haupteinkaufsstraße unserer Stadt sortiert. Aus diesem Grund habe ich einen Tisch mit einigen Geschäften, mit einer Kategorie und einem Namen gemacht.kann die Navigation nicht mehr mit Suchleiste sehen

Ich sortierte sie alphabetisch und machte eine Suchleiste für sie, wie Sie in dieser video sehen können. Bei der Navigation geht etwas schief, es funktioniert, wenn die Suchleiste nicht verwendet wird, aber sie verschwindet bei der Verwendung.

Kann mir jemand dabei helfen? Danke im Voraus! Der Code für die Haupt-View-Controller (die die komplette Navigation enthält, da nichts davon im Storyboard gemacht wird) ist nachfolgend aufgeführt: Methode:

import UIKit 

class MasterTableViewController: UITableViewController { 

//winkels filteren 
var filteredWinkels = [Winkel]() 

// MARK: - Properties 
var detailViewController: DetailViewController? = nil 
var winkels = [Winkel]() 

// MARK: - View Setup 
override func viewDidLoad() { 
    super.viewDidLoad() 

    winkels = [ 
     Winkel(category:"Literature", name:"Standaard"), 
     Winkel(category:"Literature", name:"Acco"), 
     Winkel(category:"Clothing", name:"H&M"), 
     Winkel(category:"Clothing", name:"C&A"), 
     Winkel(category:"Clothing", name:"Patio"), 
     Winkel(category:"Restaurants", name:"De 46"), 
     Winkel(category:"Cafés", name:"'t Hoekske"), 
     Winkel(category:"Supermarkets", name:"Carrefour"), 
     Winkel(category:"Supermarkets", name:"Colruyt"), 
     Winkel(category:"Supermarkets", name:"Blokker"), 
     Winkel(category:"Lingerie", name:"Hunkemoller") 
    ] 

    //alfabetisch sorteren 
    winkels.sortInPlace({ $0.name < $1.name }) 

    if let splitViewController = splitViewController { 
     let controllers = splitViewController.viewControllers 
     detailViewController = (controllers[controllers.count - 1] as! UINavigationController).topViewController as? DetailViewController 
    } 

    //searchController aanmaken 
    searchController.searchResultsUpdater = self 
    searchController.dimsBackgroundDuringPresentation = false 
    definesPresentationContext = true 
    tableView.tableHeaderView = searchController.searchBar 

    //searchButtons aanmaken 
    searchController.searchBar.scopeButtonTitles = ["All", "Clothing", "Supermarkets", "Literature"] 
    searchController.searchBar.delegate = self 


    self.tableView.reloadData() 
} 

override func viewWillAppear(animated: Bool) { 
    clearsSelectionOnViewWillAppear = splitViewController!.collapsed 
    super.viewWillAppear(animated) 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

// MARK: - Table View 
override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

//aantallen tellen 
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if searchController.active && searchController.searchBar.text != "" { 
     return filteredWinkels.count 
    } 
    return winkels.count 
} 

//naam cel aanpassen en checken 
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath) 
    let winkel: Winkel 

    if searchController.active && searchController.searchBar.text != "" { 
     winkel = filteredWinkels[indexPath.row] 
    } else { 
     winkel = winkels[indexPath.row] 
    } 

    if winkel.name .containsString("Hunkemoller") { 
     cell.textLabel!.text = "Hunkemöller" 
    } else { 
     cell.textLabel!.text = winkel.name 
    } 
    cell.detailTextLabel?.text = winkel.category 
    return cell 
} 

// Segues voorbereiden 
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) { 
    if segue.identifier == "showDetail" { 
     if let indexPath = tableView.indexPathForSelectedRow { 
      let winkel: Winkel 
      if searchController.active && searchController.searchBar.text != "" { 
       winkel = filteredWinkels[indexPath.row] 
      } else { 
       winkel = winkels[indexPath.row] 
      } 

      let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 
      controller.detailWinkel = winkel 
      controller.navigationItem.leftBarButtonItem = splitViewController?.displayModeButtonItem() 
      controller.navigationItem.leftItemsSupplementBackButton = true 
     } 
    } 
} 


override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    performSegueWithIdentifier("showDetail", sender: self) 
} 

//searchcontroller aanmaken 
let searchController = UISearchController(searchResultsController: nil) 

//scopebar maken 
func filterContentForSearchText(searchText: String, scope: String = "All") { 
    filteredWinkels = winkels.filter { winkel in 
     let categoryMatch = (scope == "All") || (winkel.category == scope) 
     return categoryMatch && winkel.name.lowercaseString.containsString(searchText.lowercaseString) 
    } 

    tableView.reloadData() 
} 

} 

// updaten 
extension MasterTableViewController: UISearchResultsUpdating { 
func updateSearchResultsForSearchController(searchController: UISearchController) { 
    let searchBar = searchController.searchBar 
    let scope = searchBar.scopeButtonTitles![searchBar.selectedScopeButtonIndex] 
    filterContentForSearchText(searchController.searchBar.text!, scope: scope) 
} 
} 

extension MasterTableViewController: UISearchBarDelegate { 
func searchBar(searchBar: UISearchBar, selectedScopeButtonIndexDidChange selectedScope: Int) { 
    filterContentForSearchText(searchBar.text!, scope: searchBar.scopeButtonTitles![selectedScope]) 
} 
} 

Antwort

2

UISearchController hat eine Eigenschaft namens hidesNavigationBarDuringPresentation, Standard ist YES. Ich stelle nicht sicher, ob das die Ursache ist.

Sie können - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath von UITableViewDelegate, implementieren self.navigationController.pushViewController Ihre DetailViewController drücken anstatt segue der Verwendung

+0

ich nicht haben Sie erwähnt die letzte Implementierung verwenden. Ich habe 'searchController.hidesNavigationBarDuringPresentation = false' verwendet, wie Sie gesagt haben. Vielen Dank! –

0

Sie Ihre Navigationsleiste Status des Ziel View-Controller in Ihrer prepareForSegue einstellen :

let controller = (segue.destinationViewController as! UINavigationController).topViewController as! DetailViewController 
      controller.detailWinkel = winkel 
controller.navigationBarHidden = true 
Verwandte Themen