【问题标题】:Table View ReloadData function not triggering cellForRowAtIndexPath Swift表视图 ReloadData 函数未触发 cellForRowAtIndexPath Swift
【发布时间】:2015-06-12 17:19:12
【问题描述】:

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

我正在我的表格视图中实现一个搜索栏,看起来一切都很好并且没有任何错误。我已经浏览了几次代码,找不到任何错误。于是我开始调试。

这是我的搜索功能:

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() 函数调用一切正常。

【问题讨论】:

  • 您正在重新声明您的var filtered,只需更新现有的filtered
  • 哈哈太棒了!很好看!

标签: ios swift uitableview uisearchbar


【解决方案1】:

您正在重新声明您的var filtered,只需更新您在cellForRowAtIndexPathindexPath 中使用的现有filtered

【讨论】:

    【解决方案2】:

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

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

    self.tView.dataSource = self
    

    有类似问题的人请参阅this question

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-21
      • 1970-01-01
      相关资源
      最近更新 更多