Панель поиска работает очень хорошо, пока я не добавлю пользовательскую ячейку tableview. Он ломается, когда я ищу ключевое слово, соответствующее массиву. Когда я ищу неправильно, он не ломается.
var filteredArray = [String]()
var searchController = UISearchController()
var result = UITableViewController()
override func viewDidLoad() {
super.viewDidLoad()
searchController = UISearchController(searchResultsController: result)
tableView.tableHeaderView = searchController.searchBar
searchController.searchResultsUpdater = self
result.tableView.delegate = self
result.tableView.dataSource = self
result.tableView.register(UITableView.self, forCellReuseIdentifier: "Cell")
}
//config seachbar
func updateSearchResults(for searchController: UISearchController) {
filteredArray = array.filter( { (array : String) -> Bool in
if array.contains(searchController.searchBar.text!)
{
return true
}
else
{
return false
}
})
result.tableView.reloadData()
}
и это tableview cellForRow
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath) as! SanPhamTableViewCell
// fill data into cell
if tableView == result.tableView
{
cell.name.text = filteredArray[indexPath.row]
cell.img.image = UIImage(named: ArrayImage[indexPath.row])
cell.price.text = ArrayPrice[indexPath.row]
cell.price.isUserInteractionEnabled = false
cell.desc.text = arrayDesc[indexPath.row]
cell.desc.isUserInteractionEnabled = false
}
else
{
cell.name.text = arrayName[indexPath.row]
cell.img.image = UIImage(named: arrayImage[indexPath.row])
cell.price.text = arrayPrice[indexPath.row]
cell.price.isUserInteractionEnabled = false
cell.desc.text = arrayDesc[indexPath.row]
cell.desc.isUserInteractionEnabled = false }
return cell
}






Вам нужно зарегистрировать такую ячейку в viewDidLoad, заменив:
result.tableView.register(UITableView.self, forCellReuseIdentifier: "Cell")
с участием:
result.tableView.register(SanPhamTableViewCell.self, forCellReuseIdentifier: "Cell")
//
Редактировать : для xib
result.tableView.register(UINib(nibName: "SanPhamTableViewCell", bundle: nil), forCellReuseIdentifier: Cell)
другой регистр неверен, это его замена
Извините, подумал, что вы имели в виду в дополнение к. Может быть, уточнить, что это замена, а не дополнение.
Я бы попробовал, но у него возникла новая проблема с cell.name.text = filterArray [indexPath.row] «Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при разворачивании необязательного значения»
у вас есть xib-ячейка или вы создали ее программно?
я создаю собственное имя ячейки SanPhamTableViewCell
'NSInternalInconsistencyException', причина: 'Не удалось загрузить NIB в комплекте:' NSBundle </ Users / dung / Library / Developer / CoreSimulator / Devices / 6116553 D-C64A-48E2-A3AD-FE5 F463BF46C / data / Containers / Bundle / Applications / D7C3C4FF-8DCC-4 47D-9106-7B4E52FE82D 9 / Search.app> (loaded) 'with name' SanPhamTableViewCell '' ', он все равно не работает
в качестве примечания либо у вас должен быть SanPhamTableViewCell.swift с SanPhamTableViewCell.xib, либо только SanPhamTableViewCell с подпредставлениями, созданными программно
'cell.name.text = filterArray [indexPath.row] Поток 1: Неустранимая ошибка: неожиданно обнаружен ноль при разворачивании необязательного значения', это все еще является ошибкой
вы должны создать xib, чтобы он работал, и связать ярлыки с xib
да, позволь мне попробовать
Я не уверен, как вы делаете SanPhamTableViewCell, но если вы используете специальный наконечник, то этот наконечник также должен быть зарегистрирован в tableView.
result.tableView.register(UINib(nibName: "SanPhamTableViewCell", bundle: nil), forCellWithReuseIdentifier: "Cell")
«Невозможно вызвать 'регистр' со списком аргументов типа '(UINib, forCellWithReuseIdentifier: String)» Я пытаюсь и получаю такую ошибку
Вы настраиваете идентификатор в файле пера для SanPhamTableViewCell?
Вы не можете зарегистрировать два разных типа ячеек для одного идентификатора.