Swift - 在加载另一个单元格后更新单元格中的标签?

时间:2018-02-25 16:33:37

标签: ios swift uitableview

有人可以告诉我如何实现以下目标吗?

我有2个细胞:

  1. 我的第一个单元格已加载并包含//https://stackoverflow.com/a/2450976/6622587 function shuffle(model){ var currentIndex = model.count, temporaryValue, randomIndex; // While there remain elements to shuffle... while (0 !== currentIndex) { // Pick a remaining element... randomIndex = Math.floor(Math.random() * currentIndex) currentIndex -= 1 // And swap it with the current element. // the dictionaries maintain their reference so a copy should be made // https://stackoverflow.com/a/36645492/6622587 temporaryValue = JSON.parse(JSON.stringify(model.get(currentIndex))) model.set(currentIndex, model.get(randomIndex)) model.set(randomIndex, temporaryValue); } return model; }

  2. 我的第二个单元格已加载并包含另一个import QtQuick 2.9 import QtQuick.Window 2.2 import "utils.js" as Util Window { visible: true width: 640 height: 480 title: qsTr("Hello World") ListModel { id: fruitModel ListElement { name: "Apple" cost: 2.45 } ListElement { name: "Banana" cost: 1.95 } ListElement { name: "Orange" cost: 3.25 } } Column { Repeater { model: Util.shuffle(fruitModel) Row { spacing: 10 Text { text: name } Text { text: '$' + cost } } } } } 。那个标签是 填充了label的值。

  3. 我想要做的是,使用单元格2 label中的值更新单元格1中的URLSession

    我不太清楚如何做到这一点。我已经尝试在tableview中创建一个变量来捕获结果并执行didSet然后label,但是这会陷入无限循环并且失败。

    我可以发布代码,但是我所描述的内容没有任何独特之处,因此只会在询问时添加代码。提前谢谢!

    以下代码,根据要求。我希望 label 的值在更新后进入我的tableView.reloadData。:

    runningTotal

1 个答案:

答案 0 :(得分:3)

这个问题不是一个特别难以解决的问题,因此我将尝试将其细分为一小部分。从你所描述的,你大致是正确的。

首先,您需要一些方法来跟踪第一个单元格。您可能希望使用表视图中的tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)委托方法来获取第一个单元格,然后将其保存到该视图控制器中的变量中,类似var firstCell: MyCustomCellClass?

然后,在第二个单元格中使用didSet的概念,我们可以使用委托来通知视图控制器任何更改。为此,我将在第二个单元类中声明一个协议:

protocol MySecondCellProtocol {
  func myValueDidChange(newValue: String)
}

然后在第二个单元格类中,您将需要一个委托变量:var delegate: MySecondCellProtocol?,以便您可以执行以下操作:

var myValue = "" {
    didSet(newVal) {
        delegate?.myValueDidChange(newVal)
    }
}

在视图控制器中,您需要扩展自己以实现此协议:

extension MyViewController: MySecondCellProtocol {
    func myValueDidChange(newValue: String) {
        firstCell?.label.text = newValue
    }
}

您还需要返回tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)功能并设置:

cell2.delegate = self

以便接收委托电话。

如果有任何不清楚的地方,请告诉我。我显然还没有包含执行此操作所需的所有代码,因为它将取决于您的方案,并且到目前为止没有看到您的代码库,这是我能做的最好。