gpt4 book ai didi

ios - 动画 UITableViewCell 以编程方式移动到底部

转载 作者:搜寻专家 更新时间:2023-11-01 07:12:56 24 4
gpt4 key购买 nike

我在同一部分中有一组单元格。当我按下其中一个单元格上的按钮时,我希望它移动到底部,并带有动画,在其他单元格上方移动。我想到的动画类似于在编辑模式下拖动单元格时发生的情况,但我希望它在我点击按钮时以编程方式完成。对于我收集到的信息,我应该使用 tableView.moveRowAtIndexPath,但我似乎无法正确地做到这一点:

 //inside the function for when the button is pressed
let cell = sender.superview?.superview?.superview as! MainTableViewCell
let indexPath = tableView.indexPathForCell(cell)
let goal = goals[(indexPath?.row)!]

goals.removeAtIndex((indexPath?.row)!)
goals.append(goal)

tableView.beginUpdates()
self.tableView.moveRowAtIndexPath(indexPath!, toIndexPath: indexPaths.last!)
tableView.endUpdates()

tableView.reloadData()

在此之后,函数会禁用触发函数本身的按钮。我注意到发生的事情是,不仅我想移动的单元格被禁用,而且该部分中的最后一个单元格也被禁用。如果最后一个单元格已被禁用,则最后一个单元格将被禁用,依此类推。任何帮助将不胜感激。

编辑:我还调用 canMoveRowAtIndexPath 并返回 true。

最佳答案

如果您调用 tableView.reloadData(),您将失去动画效果。您应该能够移动单元格,然后更新您的数据源(goals 数组)以反射(reflect)项目的新顺序。您也不需要为单个更新调用 tableView.beginUpdates()tableView.endUpdates()。您将使用这些调用来批处理多个更新(插入、删除、移动等)

//inside the function for when the button is pressed
let cell = sender.superview?.superview?.superview as! MainTableViewCell
let indexPath = tableView.indexPathForCell(cell)
let goal = goals[(indexPath?.row)!]

tableView.moveRowAtIndexPath(indexPath!, toIndexPath: indexPaths.last!)
goals.removeAtIndex((indexPath?.row)!)
goals.append(goal)

我创建了一个简单的测试项目来验证,使用简单的字符串作为数据项,动画效果达到了预期。请在此处查看要点:MoveTableRow

关于ios - 动画 UITableViewCell 以编程方式移动到底部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43982756/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com