gpt4 book ai didi

iOS UITableView 在代码中移动单元格

转载 作者:可可西里 更新时间:2023-11-01 01:09:06 24 4
gpt4 key购买 nike

我最近开始从事一个小型 iOS 项目,其中我有一个由 UITableView 表示的游戏得分排行榜,每当玩家获得新的高分时,排行榜就会显示并且他的由 UITableViewCell 表示的分数条目(包括图片、名称和分数)应该移动到它现在所属的 TableView 排行榜中新的正确位置。新 index 的计算工作正常,但 cell 根本没有移动。

一些信息:

  • 排行榜填充成功,

  • 我将 func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool 设置为 true

  • 还实现了 func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath)

正确。

我在想,也许我遗漏了什么,但问题也可能出在其他地方,我不知道,非常感谢您的帮助。

委托(delegate)方法进行编辑

func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}
// Handles reordering of Cells
func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {
let player = players[sourceIndexPath.row]
players.remove(at: sourceIndexPath.row)
players.insert(player, at: destinationIndexPath.row)
}

我尝试移动行的代码

func newHighscore(highscore: Int) {
friendsTableView.reloadData()
let myNewIndex = Player.recalculateMyIndex(players: players, score: highscore)
friendsTableView.moveRow(at: [0,Player.myIndex], to: [0,myNewIndex])

}

最佳答案

此代码有效,但它只是示例。为你调整它。创建新文件并将此代码放入其中,构建并检查。

class ViewController: UIViewController {

@IBOutlet weak var tableView: UITableView!


var scores = ["1", "2", "3", "4", "5"]

override func viewDidLoad() {
super.viewDidLoad()
}

func move(from: IndexPath, to: IndexPath) {
UIView.animate(withDuration: 1, animations: {
self.tableView.moveRow(at: from, to: to)
}) { (true) in
// write here code to remove score from array at position "at" and insert at position "to" and after reloadData()
}
}

@IBAction func buttonPressed(_ sender: UIButton) {
let fromIndexPath = IndexPath(row: 4, section: 0)
let toIndexPath = IndexPath(row: 1, section: 0)
move(from: fromIndexPath, to: toIndexPath)
}
}

extension ViewController: UITableViewDelegate, UITableViewDataSource {

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return scores.count
}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as? TableViewCell
if let cell = cell {
cell.setText(text: scores[indexPath.row])
}
return cell ?? UITableViewCell()
}

func tableView(_ tableView: UITableView, canMoveRowAt indexPath: IndexPath) -> Bool {
return true
}

}

为了正确使用,你需要最后在数组中插入新元素,重新加载数据,然后你可以调用方法 move() 并将当前 indexPath 和 indexPath 放入其中以插入你需要的。

关于iOS UITableView 在代码中移动单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49554820/

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