我试图添加一个拉动以向我的tableview添加单元格功能,并且无法正确显示我的数据。目前它的工作方式是当用户开始向下拉时,占位符单元被放置为子视图,直到用户放开或拉下足够远。一旦用户拉下足够远的距离,就会将一个新的ToDoItem添加到ToDo项目数组中,其中构建了tableview,然后重新加载数据以显示新项目并删除占位符单元格。它工作正常,直到我开始删除并检查单元格。一旦我这样做,一些细胞似乎被检查,尽管没有检查它们,其他细胞消失,直到我点击它们。
所有这些功能都在我的TableViewController
中override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! TodoTableViewCell
// Configure the cell...
let item = todoList[(indexPath as NSIndexPath).row]
cell.textField.text = item.text
cell.selectionStyle = .none
cell.delegate = self
cell.toDoItem = item
// make seperators go edge to edge
cell.layoutMargins = UIEdgeInsetsZero
return cell
}
// delete task from list
func deleteItem(_ item: ToDoItem) {
let index = todoList.index(of: item)
if index == nil {
return
}
todoList.remove(at: index!)
tableView.reloadData()
}
var count = 0
func addItem() {
count += 1
let toDoItem = ToDoItem(text: "New cell " + String(count))
todoList.insert(toDoItem, at: 0)
tableView.reloadData()
//tableView.insertRows(at: [IndexPath(row: 0, section: 0)], with: .none)
}
let placeHolderCell = TodoTableViewCell()
var pullDown = false
override func scrollViewWillBeginDragging(_ scrollView: UIScrollView) {
pullDown = scrollView.contentOffset.y <= 0.0
if pullDown {
placeHolderCell.backgroundColor = settings.backgroundColor
placeHolderCell.textField.text = "Pull down to add"
tableView.insertSubview(placeHolderCell, at: 0)
}
}
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
if scrollView.contentOffset.y < 0 && pullDown {
placeHolderCell.frame = CGRect(x: 0, y: -tableView.rowHeight, width: tableView.frame.size.width, height: tableView.rowHeight)
if scrollView.contentOffset.y < -tableView.rowHeight && pullDown {
scrollView.isScrollEnabled = false
}
}
else {
placeHolderCell.removeFromSuperview()
pullDown = false
}
}
override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
if !scrollView.isScrollEnabled {
addItem()
placeHolderCell.removeFromSuperview()
scrollView.isScrollEnabled = true
}
pullDown = false
}