当我在TableView中向下滚动时,单元格数据会发生变化-Swift 4

当我在TableView中向下滚动时,单元格数据会发生变化-Swift 4,swift,tableview,Swift,Tableview,当我在表格视图中向下滚动时,消失的单元格数据随之改变。我怎样才能解决这个问题 class TableViewController: UITableViewController { var number = 1 let finishNumber = 10 override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { ret

当我在表格视图中向下滚动时,消失的单元格数据随之改变。我怎样才能解决这个问题

class TableViewController: UITableViewController {

    var number = 1
    let finishNumber = 10

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return finishNumber
    }

    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)

        cell.textLabel?.text = "\(number)"

        number = number + 1

        return cell
    }
}

每次表格视图要求单元格时,您都会更新编号。与正在显示的行没有直接关系的

现在还不清楚你为什么会有
number
属性

如果只想在每个单元格中显示相应的行号,请去掉
number
属性并更新:

cell.textLabel?.text = "\(number)"
与:


问题不清楚,但我想当tableview重新加载时,您希望滚动到底部,对吗

extension UITableView {
    func scrollToBottom(animated: Bool = false) {
        let section = self.numberOfSections
        if (section > 0) {
            let row = self.numberOfRows(inSection: section - 1)
            if (row > 0) {
                 self.scrollToRow(at: IndexPath(row: row - 1, section: section - 1), at: .bottom, animated: animated)
            }
        }
    }
}
调用时,需要使用“异步”


祝你好运。

这确实有效,但是,这只是一个例子,我有一个项目,里面有很多代码,我正在尝试制作一个公交车应用程序,公交车每60分钟经过一站。因此,如果时间是早上9:00,我将在该时间开始,并为每个单元格添加一个小时(indexPath.row则在这里不起作用)。你的答案是正确的,但我如何解决巴士应用程序的问题?首先,更新你的问题,使其涵盖你的实际问题。你问题中人为的例子并不是你真正想做的。正确的解决方案是使用一个数据模型,通常是一个数组,其中包含实际要在表视图中显示的数据。您可以使用
indexPath
访问数组的相应元素,并使用该行的数据设置单元格。谢谢,我会尝试一下。不过,我不会更新我的问题,我只会将您的答案标记为正确,以供其他遇到此问题的人参考。只要10分钟的等待时间结束了,我就会勾选它。
extension UITableView {
    func scrollToBottom(animated: Bool = false) {
        let section = self.numberOfSections
        if (section > 0) {
            let row = self.numberOfRows(inSection: section - 1)
            if (row > 0) {
                 self.scrollToRow(at: IndexPath(row: row - 1, section: section - 1), at: .bottom, animated: animated)
            }
        }
    }
}
DispatchQueue.main.async(execute: {
    yourTableView.reloadData()
    yourTableView.scrollToBottom()
}