私は自分の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()
}
あなたはどこかにあなたのコードにバグがあります。検索バーを表示/非表示にするコードと、データをフィルタリングするコードを投稿します。 –
@DuncanCそれが問題です。コードは設定されていません。私はストーリーボードのオブジェクトライブラリからテーブルビューに追加しました。あなたはそれを設定する方法を学ぶために任意のリソースをお勧めしますか? –
http://shrikar.com/swift-ios-tutorial-uisearchbar-and-uisearchbardelegate/このリンクに従います – karthik