2016-05-01 15 views
0

UISearchControllerupdateSearchResultsForSearchControllerを実装しようとするのが難しいです。元の配列をどのように実装したかと関係しています。その配列を使って検索したテキストを見つける方法がわかりません。私は私のdataを使用する方法のほんの少し混乱しているUISearchControllerでupdateSearchResultsForSearchControllerを実装する際に問題がありますか?

var resultsSearchController = UISearchController() 
var filteredData: [Test] = [Test]() 

var data: [Test] = [Test]() 

override func viewDidLoad() 
{   
    resultsSearchController = UISearchController(searchResultsController: nil) 
    definesPresentationContext = true 
    resultsSearchController.dimsBackgroundDuringPresentation = true 
    resultsSearchController.searchResultsUpdater = self 
    tableView.tableHeaderView = resultsSearchController.searchBar 

    data = [ 
    Test(name: "Abby", hobby: "Games"), 
    Test(name: "Brian", hobby: "TV"), 
    Test(name: "Ced", hobby: "Gym"), 
    Test(name: "David", hobby: "Fun")] 

    tableView.dataSource = self 
    tableView.delegate = self 
} 

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{ 
    if (resultsSearchController.active && resultsSearchController.searchBar.text != "") 
    { 
     return filteredData.count 
    } 

    return data.count 
} 

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell 
{ 
    var cell: UITableViewCell! 

    // Dequeue the cell to load data 
    cell = tableView.dequeueReusableCellWithIdentifier("Funny", forIndexPath: indexPath) 

    let example: Test 

    if resultsSearchController.active && resultsSearchController.searchBar.text != "" 
    { 
     example = filteredData[indexPath.row] 
    } 
    else 
    { 
     example = data[indexPath.row] 
    } 

    return cell 
} 

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

    let searchPredicate = NSPredicate(format: "hobby CONTAINS[c] %@", resultsSearchController.searchBar.text!) 

    // WHAT ELSE TO DO? 

    tableView.reloadData() 
} 

Test.swift:

struct Test 
{ 
    let name: String 
    let hobby: String 
} 

Main.swiftここ

は、私のコードの抜粋です正しい検索結果を updateSearchResultsForSearchControllerに戻す。

誰かが正しい方向に向かうことができますか?あなたが別のタイプを実行したい場合は

func updateSearchResultsForSearchController(searchController: UISearchController) { 

    filteredData.removeAll(keepCapacity: false) 

    let searchedData = resultsSearchController.searchBar.text 

    // find elements that contains the searchedData string for example 
    filteredData = data.filter { $0.name.containsString(searchedData) } 

    tableView.reloadData() 
} 

:あなたがにあなたのデータソースで検索を行うと、他のデータ何も返さない、このコードのようなものされてする必要がありますどのような

おかげ

答えて

2

あなたの好きなようにfilterを変更することができますstructの別のフィールドに関する検索。 tableView.reloadData()に電話をかけると、すべてが再び読み込まれます。

私はこれがあなたに役立つことを願っています。

+0

ありがとうございます。しかし、私は最後の1つの問題に直面しています。 'resultsSearchController.dimsBackgroundDuringPresentation = true'は、検索が存在するとき、私の好きなものですが、私の背景を暗くします...しかし、フィルタリングされた結果を選択することはできず、代わりに元のTable Viewに戻ります。 'resultsSearchController.dimsBackgroundDuringPresentation = false'を設定すると、検索があるときに背景を薄暗くしたいと思います。どうすればこれを達成できますか? – Pangu

+0

'UISearchController'はそれが提示されたビューを暗くします。これは、あなたが同じ 'UITableViewController'を使用している場合、searchResultsControllerに別のView Controllerを使用している場合に便利です。 –

+0

はい、正しいですが、私は同じテーブルビューを使用しています。私はちょうど背景を薄暗くしたい。これを達成する唯一の方法は、検索が存在し、その背景を薄暗くするときにUIViewオーバーレイを作成することですか?それとも簡単な方法がありますか? – Pangu

関連する問題