gpt4 book ai didi

ios - 如何将当前单元格的数据与其在 TableView Swift 4 中的前一个单元格进行比较?

转载 作者:行者123 更新时间:2023-11-28 12:08:44 63 4
gpt4 key购买 nike

我有一个 JSON 看起来像这样:

"product": [
{
"product_id": 471,
"info": "123456",
},
{
"product_id": 471,
"info": "356697456",
},
{
"product_id": 472,
"info": "1432",
},
{
"product_id": 473,
"info": "4321",
},
]

我想将我的 TableView 设置为如下图所示:

enter image description here

我想要的是:

  1. 如果 TableView 中的第一个单元格我想要显示产品 1(红色)。

  2. 如果第二个单元格的 product_id 与前一个单元格的 product_id 相同,则 Product 1 不再显示,它会消失。

  3. 由于第 3 个单元格的 product_id 与前一个单元格(第二个单元格)不相同,因此显示红色标签 Product 2。

  4. 同样转到 Product 3TableView

    中单元格的其余部分

我已经尝试过的:

为了实现这一点,我需要获取cellAtRow委托(delegate)中的indexPath,所以我将每个单元格的product_id与之前的进行比较,然后控制里面的逻辑.

这是我的代码

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

let thisIndexPath = indexPath.row
if thisIndexPath - 1 > -1 {

let previousProductId = self.productItem[thisIndexPath - 1].productId
let thisProductId = self.productItem[thisIndexPath].productId

if previousProductId == thisProductId {

cell.productLabel.isHidden = true
cell.productHeight.constant = 0
cell.productnameTopContraint.constant = 0
cell.productnameBottomContraints.constant = 0
}else {
cell.productnameLabel.isHidden = false

}
}else{
cell.productnameLabel.isHidden = false
}

cell.item = selfProductItem[indexPath.row]
return cell
}
}

但是现在的问题是:

-- 当 TableView 第一次启动时,UI 显示如上所示,但是当我开始滚动时,所有单元格的 Product 标签(红色)消失了,尽管 product_id 与之前单元格的 product_id 不同。

-- 当我滚动回第一个单元格时,产品标签(红色)也消失了。这意味着 UI 仅在屏幕首次启动时正确,不是持久的。

所以我的问题是:

  1. 比较当前单元格和前一个单元格数据的正确方法是什么?

  2. cellForRowAt 委托(delegate)方法中进行比较是否正确?如果不正确,我应该在哪里进行比较?

最佳答案

我认为要解决您的问题,您应该考虑如何存储 JSON 数据。

您可以首先创建一个名为“Product”的struct,它将存储产品信息,然后通过使其成为Equatable,您可以添加一个函数,它允许您比较产品 ID:

/// Structure Of A Product
struct Product: Equatable{

var productID: Int
var productInfo: Int

static func == (lhs: Product, rhs: Product) -> Bool {
return lhs.productID == rhs.productID
}
}

现在要使用这个结构,您可以创建一个数组变量来存储您的产品:

//Array To Store Array Of Product
var products = [Product]()

在这个例子中,我只是手动输入产品信息,但你应该以更好的方式处理它。但是,它确实说明了一种您可以“开始”处理此问题的方法:

   override func viewDidLoad() {
super.viewDidLoad()

//1. Create Products
let productOne = Product(productID: 471, productInfo: 123456)
let productTwo = Product(productID: 471, productInfo: 356697456)
let productThree = Product(productID: 472, productInfo: 1432)
let productFour = Product(productID: 473, productInfo: 4321)

//2. Add Them To The Products Array
addUnique(productOne)
addUnique(productTwo)
addUnique(productThree)
addUnique(productFour)

}

/// Checks That A Product Doesn't Exist
///
/// - Parameter product: Product
func addUnique(_ product: Product) {
if !products.contains(product) {
products.append(product)
}
}

在第 1 步中,我们手动创建产品。

在第 2 步中,我们调用 addUnique(_ product) 函数,它只允许存储唯一的产品。

在确保没有重复的 ProductID 之后,您应该可以轻松地根据需要设置格式:

  func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

let cell = tableView.dequeueReusableCell(withIdentifier: "MyCell", for: indexPath) as! MyCell
cell.productLabel.text = products[indexPath.row].productID
cell.productnameLabel.text = products[indexPath.row].productInfo
}

当然,您需要修复标签的任何颜色等。

关于ios - 如何将当前单元格的数据与其在 TableView Swift 4 中的前一个单元格进行比较?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48960957/

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