我对Swift和iOS比较新,我有一个问题 - 我有一个自定义的SwipeCell类,它扩展了UITableViewCell。它是一个可以左右滑动的单元格,每侧都有按钮。出于某种原因,如果我在用户滑动单元格时将按钮从单元格的框架中取出,它们会出现但无法调用动作,因此我的解决方案是使单元格比它更宽(因此按钮可以适合它)。因为它是以这种方式完成的,所以我的单元格必须默认为左边按钮的总宽度(假设为100),所以它的位置是X:-100。
这很好,一切都与细胞一起罚款,但是有一个很大的问题 - 如果我从表格中删除任何单元格就像这样
tableView.deleteRowsAtIndexPaths([tableView.indexPathForCell(activeCell)!], withRowAnimation: .None)
tableView然后删除单元格,当前可见的所有其他单元格(屏幕边界上方或下方的单元格不会发生)被移动到X:0而不是停留在X:-100,所以我假设deleteRowsAtIndexPaths调用一些将可见单元格位置重置为0,0的函数。我目前正在使用layoutSubviews()设置滑动单元格位置,因为按钮的数量是动态的,无法预先确定,但layoutSubviews不是发生错误的函数。
总结一下问题 - deleteRowsAtIndexPaths在删除重置/重绘可见单元格的单元格后调用了什么函数?
答案 0 :(得分:1)
deleteRowsAtIndexPaths
从tableView中删除一行。这是由iOS内部处理的。来自Apple documentation:
使用选项删除索引路径数组指定的行 动画删除。
此处需要注意的另一个有趣的事情是,此方法不会修改您的模型(保存表视图单元格所使用的数据以在其自身上呈现的对象)。你必须自己做。单元格将被删除,但如果您调用reloadData而不删除模型中的行,则单元格将重新出现。
答案 1 :(得分:0)
预计细胞会一直被删除和创建。细胞是非常非常临时的物体。编写代码以在需要时创建一个代码,并且不做任何假设。不要假设单元格在那里,不要假设它在同一行,不要假设它显示相同的数据(因为单元格被回收)。
答案 2 :(得分:0)
因为我可以找出deleteRowAtIndexPaths内部发生了什么,以及为什么它改变了每个Cell的帧,我决定只通过使用tableView.visibleCells获取单元格来执行我自己的删除行的函数,然后只是移动单元格删除的单元格被删除的单元格的高度。谢谢大家试图帮助我,特别感谢Abhinav告诉我它是在内部处理的,这有助于我决定编写一个自定义代码进行删除。