0
UISearchController
にupdateSearchResultsForSearchController
を実装しようとするのが難しいです。元の配列をどのように実装したかと関係しています。その配列を使って検索したテキストを見つける方法がわかりません。私は私の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()
}
:あなたがにあなたのデータソースで検索を行うと、他のデータ何も返さない、このコードのようなものされてする必要がありますどのような
おかげ
ありがとうございます。しかし、私は最後の1つの問題に直面しています。 'resultsSearchController.dimsBackgroundDuringPresentation = true'は、検索が存在するとき、私の好きなものですが、私の背景を暗くします...しかし、フィルタリングされた結果を選択することはできず、代わりに元のTable Viewに戻ります。 'resultsSearchController.dimsBackgroundDuringPresentation = false'を設定すると、検索があるときに背景を薄暗くしたいと思います。どうすればこれを達成できますか? – Pangu
'UISearchController'はそれが提示されたビューを暗くします。これは、あなたが同じ 'UITableViewController'を使用している場合、searchResultsControllerに別のView Controllerを使用している場合に便利です。 –
はい、正しいですが、私は同じテーブルビューを使用しています。私はちょうど背景を薄暗くしたい。これを達成する唯一の方法は、検索が存在し、その背景を薄暗くするときにUIViewオーバーレイを作成することですか?それとも簡単な方法がありますか? – Pangu