2016-05-21 18 views
0

私は自分のtableviewアプリケーションで検索機能を実装しました。唯一の問題は、検索バーをタップしてキャンセルをタップすると、以前に表示されたセルが消えてしまった場合です。これはすべての在庫です。何も変わっていません。検索ディスプレイコントローラーを追加したとき、構成なしでストーリーボードから追加しました。 didDismissSearchController(searchController:UISearchController)検索バーがタップされると、Tableviewcellsが消える - Swift

import UIKit 

class DataTableExercisesTableViewController: UITableViewController, UISearchResultsUpdating { 

let exercises = ["Abs", "Arms", "Back", "Chest", "Legs", "Shoulders", "Triceps"] 
var filteredTableData = [String]() 
var resultSearchController = UISearchController(searchResultsController: nil) 





override func viewDidLoad() { 
    super.viewDidLoad() 

    self.resultSearchController = ({ 
     let controller = UISearchController(searchResultsController: nil) 
     resultSearchController.searchResultsUpdater = self 
     resultSearchController.dimsBackgroundDuringPresentation = false 
     resultSearchController.searchBar.sizeToFit() 
     resultSearchController.hidesNavigationBarDuringPresentation = false 
     tableView.tableHeaderView = resultSearchController.searchBar 


     return controller 
    })() 

    self.tableView.reloadData() 

} 



// MARK: - Table view data source 

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

    // #warning Incomplete implementation, return the number of sections 

    return 1 
} 

override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if resultSearchController.active { 
     return filteredTableData.count 
    } else { 
     return exercises.count 
    } 
} 





override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    let cell = tableView.dequeueReusableCellWithIdentifier("ExerciseCell", forIndexPath: indexPath) 



    // Configure the cell... 

    if (self.resultSearchController.active) { 
     cell.textLabel?.text = filteredTableData[indexPath.row] 

     return cell 
    } 
    else { 
     cell.textLabel?.text = exercises[indexPath.row] 

     return cell 
    } 
} 


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

self.tableView.reloadData() 


} 

func updateSearchResultsForSearchController(searchController: UISearchController) 
{ 
    filteredTableData.removeAll(keepCapacity: false) 

    let searchPredicate = NSPredicate(format: "SELF CONTAINS[c] %@", searchController.searchBar.text!) 
    let array = (exercises as NSArray).filteredArrayUsingPredicate(searchPredicate) 
    filteredTableData = array as! [String] 

    self.tableView.reloadData() 
} 

After Search is tapped

+0

あなたはどこかにあなたのコードにバグがあります。検索バーを表示/非表示にするコードと、データをフィルタリングするコードを投稿します。 –

+0

@DuncanCそれが問題です。コードは設定されていません。私はストーリーボードのオブジェクトライブラリからテーブルビューに追加しました。あなたはそれを設定する方法を学ぶために任意のリソースをお勧めしますか? –

+0

http://shrikar.com/swift-ios-tutorial-uisearchbar-and-uisearchbardelegate/このリンクに従います – karthik

答えて

0

を私は以下のようにresultSearchControllerの初期設定を変更しており、それが動作します。

self.resultSearchController = ({ 
    let controller = UISearchController(searchResultsController: nil) 
    controller.searchResultsUpdater = self 
    controller.dimsBackgroundDuringPresentation = false 
    controller.searchBar.sizeToFit() 
    controller.hidesNavigationBarDuringPresentation = false 
    tableView.tableHeaderView = controller.searchBar 

    return controller 
})() 

`` `

関連する問題