Я пытаюсь изменить цвет ячейки, если имя ячейки совпадает с частью текста в строке поиска. Почти как ячейка подсвечивается. Я использую панель поиска и представление таблицы для этого.
Я пробовал этот код с помощью комментариев, но все еще не могу понять:
let allElements = ["Hydrogen", "Helium", ...]
var searchElement = [String]()
var searching = false
var myIndex = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
print("row selected : \(indexPath.row)")
if indexPath.row == 0 {
let hydrogenSearchSegue = UIStoryboard(name:"Main", bundle:nil).instantiateViewController(withIdentifier: "hydrogenView") as! hydrogenViewController
self.navigationController?.pushViewController(hydrogenSearchSegue, animated:true)
}
}
}
extension searchViewController: UITableViewDataSource, UITableViewDelegate {
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching == true {
return searchElement.count
} else {
return allElements.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell")
if searching == true {
cell?.textLabel?.text = searchElement[indexPath.row]
} else {
cell?.textLabel?.text = allElements[indexPath.row]
}
return cell!
}
func tableView(tableView: UITableView, willDisplayCell cell: UITableViewCell, forRowAtIndexPath indexPath: NSIndexPath) {
let string = allElements[indexPath.row]
if searchElement.contains(string) {
cell.backgroundColor = UIColor.red
} else {
cell.backgroundColor = UIColor.white
}
}
}
extension searchViewController: UISearchBarDelegate {
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchElement = allElements.filter({$0.lowercased().prefix(searchText.count) == searchText.lowercased()})
searching = true
tableView.reloadData()
}
func searchBarCancelButtonClicked(_ searchBar: UISearchBar) {
_ = navigationController?.popViewController(animated: true)
searchBar.text = ""
tableView.reloadData()
}
}
Цель состояла в том, чтобы попытаться использовать .filter для разделения ячеек которые не содержат текст панели поиска с тем, что делает. Затем измените цвет ячейки, если она содержит этот текст.