2016-07-29 15 views
2

Während der Suche in einem TableView, jedes Mal, wenn ich versuche, eine Zeile auszuwählen, bringt es mich nur zurück in die nicht durchsuchten TableView. Was vermisse ich? Der Übergang funktioniert perfekt, wenn nicht durch die Tabelle gefiltert wird. Die Möglichkeit, eine Zeile auszuwählen, verschwindet nur, wenn die searchBar aktiviert ist.Suchen TableView kann Zeile nicht auswählen

import UIKit 
import Foundation 

class BenchmarkWODViewController: UITableViewController, UISearchResultsUpdating { 

    var WodList = [WOD]() 
    var FilteredWodList = [WOD]() 
    var Keyword = "" 
    var searchController : UISearchController? 
    var index = Int() 

    @IBAction func backButton(sender: AnyObject) { 
     self.navigationController?.popViewControllerAnimated(true) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     for wodData in BenchmarkWODs.library { 
      let wod = WOD(dictionary: wodData) 
      WodList.append(wod) 
    } 

    // Search Bar 
     self.searchController = UISearchController(searchResultsController: nil) 
     self.searchController?.searchBar.autocapitalizationType = .None 
     self.tableView.tableHeaderView = self.searchController?.searchBar 
     self.searchController?.searchResultsUpdater = self 
     self.Keyword = "" 
     definesPresentationContext = true 

     self.filterByName() 
    } 


    func filterByName(){ 
     self.FilteredWodList = self.WodList.filter({ (wod: WOD) -> Bool in 
      if self.Keyword.characters.count == 0 { 
      return true 
     } 

     if (wod.name?.lowercaseString.rangeOfString(self.Keyword.lowercaseString)) != nil { 
      return true 
     } 
     return false 
    }) 
     self.tableView.reloadData() 
    } 


    // Search Bar Function 
    func updateSearchResultsForSearchController(searchController:  UISearchController) { 
     Keyword = searchController.searchBar.text! 
     self.filterByName() 
    } 



    override func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return self.FilteredWodList.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
    { 
     let cell = tableView.dequeueReusableCellWithIdentifier("BenchmarkCell", forIndexPath: indexPath) as UITableViewCell 
     let wod = self.FilteredWodList[indexPath.row] 

     if let wodName = wod.name { 
     cell.textLabel?.text = wodName 
    } 
     return cell 
    } 



    override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 

    self.filterByName() 
     self.performSegueWithIdentifier("showBenchmarkDetail", sender: nil) 
    } 

} 
+0

versuchen Sie, Ihre Suche Controller in Didselectrowatindexpath Methode zu entlassen. –

+0

Warum rufen Sie 'filterByName' in' didSelectRow' auf? – Losiowaty

+0

Sie haben Suchleiste Delegat-Funktion –

Antwort

3

Ich habe es nach dem Spielen herausgefunden. Scheinbar das Hinzufügen des folgenden Codes behebt das Problem.

searchController?.dimsBackgroundDuringPresentation = false 
Verwandte Themen