gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 11:44:34 25 4
gpt4 key购买 nike

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

我有 2 个单元格:

  1. 我的第一个单元格已加载并包含一个标签

  2. 我的第二个单元格已加载并包含另一个标签。那个标签是使用 URLSession 中的值填充。

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

我不太确定该怎么做。我尝试在 tableview 中创建一个变量来捕获结果,然后执行 didSet tableView.reloadData,但这使我陷入无限循环并失败。

我可以发布代码,但与我所描述的内容没有什么不同,因此只会在询问时添加代码。提前致谢!

根据要求,代码如下。我希望 runningTotal 的值在更新后进入我的 infoCell.totalPriceLabel.text。:

var runningTotal: Double = Double()

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
if cellItems.count == 0 {
let orderEmptyCell = Bundle.main.loadNibNamed("OrderEmptyTableViewCell", owner: self, options: nil)?.first as! OrderEmptyTableViewCell
return orderEmptyCell
} else {
if indexPath.section == 0 {
let infoCell = Bundle.main.loadNibNamed("InfoTableViewCell", owner: self, options: nil)?.first as! InfoTableViewCell
infoCell.totalPriceLabel.text = String(Double(runningTotal))
print(runningTotal)
return infoCell
}else if indexPath.section == 1 {
let item: BasketModel = cellItems[indexPath.row] as! BasketModel
let ordersCell = Bundle.main.loadNibNamed("OrderTableViewCell", owner: self, options: nil)?.first as! OrderTableViewCell


if item.multi == 1 {
ordersCell.nameLabel.text = item.name! + ": " + item.filling!
} else {
ordersCell.nameLabel.text = item.name!
}

ordersCell.priceLabel.text = String(Double(basketStruct.getQty(id: item.id!)) * Double(item.price!)!)
runningTotal += (Double(basketStruct.getQty(id: item.id!)) * Double(item.price!)!)
ordersCell.quantityLabel.text = String(basketStruct.getQty(id: item.id!))
return ordersCell
}
}
}

最佳答案

这个问题并不是一个特别容易解决的问题,所以我会尝试将其分解为几个小部分。根据您的描述,您的思路大致正确。

首先,您需要某种方法来跟踪第一个单元格。您可能需要使用 TableView 中的 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 委托(delegate)方法来获取第一个单元格,然后将其保存到该 View 中的变量中 Controller ,类似于 var firstCell: MyCustomCellClass?

然后,在第二个单元格内使用您的 didSet 想法,我们可以使用委托(delegate)来通知 View Controller 任何更改。为此,我将在第二个单元类中声明一个协议(protocol),如下所示:

protocol MySecondCellProtocol {
func myValueDidChange(newValue: String)
}

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

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

在您的 View Controller 中,您将需要扩展自己以实现此协议(protocol):

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

您还需要返回到 tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) 函数并设置:

cell2.delegate = self

以便接收代表调用。

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

关于ios - Swift - 加载另一个单元格后更新单元格中的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48976998/

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