私はデータベースからアルファベットセクションのテーブルビューを持っていますが、検索バーを追加したいのですが、データをフィルタリングしてテーブルビューに実装する方法を理解できません。 私のデータベースストアは2つの構造体の中にあります:swift3を使用してテーブルビュー内のバーとセクションを検索
すべてのデータを保持する1つの構造体。
second structはセクションの最初の文字を取得し、最初のstructは配列として取得します。
マイ構造体:
struct SentenceInfo { // First struct (holds all the data)
let name: String
let detail: String
let sentence: String
init(name: String, detail: String, sentence: String) {
self.name = name
self.detail = detail
self.sentence = sentence
}
}
struct SentenceNameSection { // Second struct (first letter and array of the first struct)
var firstLetter: String
var crimes: [SentenceInfo]
init(title: String, objects: [SentenceInfo]) {
firstLetter = title
crimes = objects
}
}
私のtableView:全crimeData
の
var sections : [SentenceNameSection]!
var crimeData = [SentenceNameSection]()
var filteredData = [SentenceNameSection]()
var shouldShowSearchResults = false
var searchController: UISearchController!
func updateSearchResults(for searchController: UISearchController) {
let searchString = searchController.searchBar.text
filteredData = crimeData.filter({ (crime) -> Bool in
let crimeMatch: String = crime // Error about types
return ((crimeMatch.range(of: searchString!) != nil))
})
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: sentenceTableViewCell = tableView.dequeueReusableCell(withIdentifier: cellIdentifer, for: indexPath) as! sentenceTableViewCell
let crime: SentenceInfo = sections[indexPath.section].crimes[indexPath.row]
cell.nameLabel.text = crime.name
cell.detailLabel.text = crime.detail
cell.sentenceLabel.text = crime.sentence
return cell
}
ありがとうございました。なぜそれをテーブルビューに実装しようとするとエラーが発生するのですか(「致命的なエラー:インデックスが範囲外です」): –
( 'filteredCrime:SentenceInfo = filteredData [indexPath.section] .crimes [indexPath.row]') * Note *で述べたように、検索コントローラのisActiveに応じて、適切な値が 'numberOfSections'と' numberOfRows'から返されるようにしてください。 – vadian
あなたはそれに気付かなかった。うまく働いた。大変ありがとうございました –