Search code examples
iosswiftuitableviewsearchbar

search result not work went add tableviewcell


Search bar is woking very well until I add custom tableview cell. It breaks when I search a keyword matching with a array. When I search wrong, it doesn't break.

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()
}

and this is a 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
}

this is a error


Solution

  • You need to register the cell like this in viewDidLoad, replace:

    result.tableView.register(UITableView.self, forCellReuseIdentifier: "Cell")
    

    with:

    result.tableView.register(SanPhamTableViewCell.self, forCellReuseIdentifier: "Cell")
    

    //

    Edit : for xib

    result.tableView.register(UINib(nibName: "SanPhamTableViewCell", bundle: nil), forCellReuseIdentifier: Cell)