] [2 我有一个包含一些内容的tableView。所有细胞都表现得很完美。但删除几行后,下面的一些单元格变得不可见。我正在使用方法tableView.deleteRows(at: [indexPath], with: .automatic)
删除单元格。但他们有数据,高度也很好。一段时间后我找到了一个解决方案:我在willDisplayCell
方法中将isHidden的cell属性更改为false。我不认为这是一个很好的解决方案,但它确实有效。你怎么看?为什么细胞没有出现?
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return myFavoritesProductsDataSource.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
var cell = tableView.dequeueReusableCell(withIdentifier: "productCell") as! ProductTableViewCell
cell.product = myFavoritesProductsDataSource[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = UIContextualAction(style: .destructive, title: "Удалить", handler: { (ac:UIContextualAction, view:UIView, success:(Bool) -> Void) in
self.myFavoritesProductDataSource.remove(at: indexPath.row)
tableView.beginUpdates()
tableView.deleteRows(at: [indexPath], with: .automatic)
tableView.endUpdates()
success(true)
})
return UISwipeActionsConfiguration(actions: [delete])
}
答案 0 :(得分:0)
您应该使用cellForRowAt indexPath
来设置数据而不是willDisplayCell
。
这是格式化的代码
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "productCell", for: indexPath) as! ProductTableViewCell
cell.product = myFavoritesProductsDataSource[indexPath.row]
return cell
}
当您删除单元格时,您应该这样做。
myFavoritesProductsDataSource.remove(at: indexPath.row)
self.tableView.beginUpdates()
self.tableView.deleteRows(at: [indexPath], with: .automatic)
self.tableView.endUpdates()
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == UITableViewCellEditingStyle.delete {
myFavoritesProductsDataSource.remove(at: indexPath.row)
self.tableView.beginUpdates()
self.tableView.deleteRows(at: [indexPath], with: .automatic)
self.tableView.endUpdates()
}
}