Table 查看 ReloadData 函数未触发 cellForRowAtIndexPath Swift

Table View ReloadData function not triggering cellForRowAtIndexPath Swift

我在这里看到过类似的问题,但是 none 对我特别有帮助。

我正在 table 视图中实现一个搜索栏,看起来一切正常,没有任何错误。我仔细查看了代码几次,没有发现任何错误。于是开始调试

这是我的搜索功能:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {

    var filtered:[Room] = filterz(rooms, txt: searchText)

    //println(filtered.count)

    if(filtered.count == 0){
        searchActive = false
    } else {
        searchActive = true
    }

    self.tView.reloadData()
}

我可以看到它运行良好,因为它正在打印出正确的计数。 但是我不确定 reloadData 函数。 我认为它会触发这里的 cellForRowAtIndexPath 函数:

func  tableView(tableView:UITableView,cellForRowAtIndexPathindexPath:NSIndexPath) -> UITableViewCell {

    let cell = tableView.dequeueReusableCellWithIdentifier("RoomCell", forIndexPath: indexPath) as! UITableViewCell

    var room:Room = rooms[indexPath.row]

    if(searchActive){
        room = filtered[indexPath.row]
    }

    if let nameLabel = cell.viewWithTag(200) as? UILabel{

        nameLabel.text = room.name
        println(room.name)

    }

    if let sizeLabel = cell.viewWithTag(201) as? UILabel{

        sizeLabel.text = room.size
        println(room.size)

    }

    if let vacLabel = cell.viewWithTag(202) as? UILabel{

        vacLabel.text = room.vacant
        println(room.vacant)

    }

    if let taskIm = cell.viewWithTag(203) as? UIImageView{

        taskIm.image = UIImage(named: room.imagename)
    }

    return cell
} 

如您所见,我已经输入了要调试的打印语句,但它没有打印任何内容。是因为函数没有触发还是我的代码有问题?

如果是这样,谁能找到它?我所知道的是,直到 reloadData() 函数调用一切正常。

reloadData 不调用 cellForRowAtIndexpath 的最常见原因是您没有正确连接数据源,或者您没有引用正确的 tableView。

确保在 viewDidLoad 中的某处有一行如下所示:

self.tView.dataSource = self

请参阅 this question 以了解有类似问题的人。

此外,您可以通过子classing UITableViewCell 并创建从您的标签到单元格的出口 class 来更轻松地自己设置标签。这将允许您删除整个 if let sizeLabel = cell.viewWithTag(201) as? UILabel 舞蹈。

您正在重新声明您的 var filtered 只是更新 cellForRowAtIndexPathindexPath

中使用的现有 filtered