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
我在这里看到过类似的问题,但是 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