有人可以告诉我如何实现以下目标吗?
我有2个细胞:
我的第一个单元格已加载并包含//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;
}
。
我的第二个单元格已加载并包含另一个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
的值。
我想要做的是,使用单元格2 label
中的值更新单元格1中的URLSession
。
我不太清楚如何做到这一点。我已经尝试在tableview中创建一个变量来捕获结果并执行didSet然后label
,但是这会陷入无限循环并且失败。
我可以发布代码,但是我所描述的内容没有任何独特之处,因此只会在询问时添加代码。提前谢谢!
以下代码,根据要求。我希望 label
的值在更新后进入我的tableView.reloadData
。:
runningTotal
答案 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
以便接收委托电话。
如果有任何不清楚的地方,请告诉我。我显然还没有包含执行此操作所需的所有代码,因为它将取决于您的方案,并且到目前为止没有看到您的代码库,这是我能做的最好。