在UITableView中使单元格可见

时间:2017-11-17 22:37:27

标签: swift uitableview cell

First step[![][1]] [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])
}

1 个答案:

答案 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()

    }
}