我花了大約3個小時試圖讓這個UISearchbar正常工作。我有一個Notes
的自定義類,它有一個屬性.name
。我試圖通過屬性.name
過濾數據(一系列註釋)。我實現了delegate
並實例化了第二個過濾的數組以及所有需要的協議要求。但我似乎無法讓我的搜索功能返回正確的數據。以下是我正在使用的當前代碼。它建立良好,但是當我開始在搜索欄中輸入時,出現index out range
的錯誤,這發生在下面的行中,附帶註釋。這是從視圖控制器和其內部的表控制器內完成的。UISearchBar iOS返回索引超出範圍的錯誤
var notes = [Notes]()
var searchActive : Bool = false
var filtered = [Notes]()
/// these above vars are global ///
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
filtered = notes.filter(){ (Notes) -> Bool in
let range = Notes.name.range(of: searchText, options: NSString.CompareOptions.caseInsensitive)
return range != nil
}
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var note: Notes
if(searchActive){
//// THIS IS WHERE THE ERROR IS THROWN /////
note = filtered[indexPath.row]
} else {
note = notes[indexPath.row]
}
if let cell = tableView.dequeueReusableCell(withIdentifier: "NoteCell", for: indexPath as IndexPath) as? NoteCell {
cell.configureCell(note: note)
return cell
} else {
return NoteCell()
}
}
如果從「搜索欄:textDidChange」條件只能刪除方法和searchbar.text =「」加入這一行「searchBarCancelButtonClicked」的方法,你的問題已經解決。 – Vivek
如果你想要更多的澄清請添加你的所有視圖控制器代碼,我會建議你的代碼有什麼問題 – Vivek