【发布时间】:2018-02-24 08:38:51
【问题描述】:
我有一个 JSON,看起来像这样:
"product": [
{
"product_id": 471,
"info": "123456",
},
{
"product_id": 471,
"info": "356697456",
},
{
"product_id": 472,
"info": "1432",
},
{
"product_id": 473,
"info": "4321",
},
]
我想将我的 TableView 设置为如下图所示:
我想要的是:
如果 TableView 中的第一个单元格我希望显示产品 1(红色)。
如果第二个单元格的
product_id与前一个单元格的product_id相同,则产品 1 不再显示,它会消失。由于第三个单元格的
product_id与前一个单元格(第二个单元格)不同,所以会显示红色标签 Product 2。同样转到
Product 3和TableView中的单元格的其余部分
我已经尝试过的:
为了实现这一点,我需要在cellAtRowdelegate中获取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 仅在屏幕第一次启动时正确,这不是持久的。
所以我的问题是:
比较当前单元格和前一个单元格的数据的正确方法是什么?
在
cellForRowAt委托方法里面做比较对吗?如果不是,我应该在哪里做呢?
【问题讨论】:
-
看起来您正在使用 1 个部分,尝试为每个 product_id 创建部分,并将行添加到相同产品的部分。
-
@TomaszCzyżak 嘿兄弟,因为
product 1或product_2也会出现在底部 -
尝试在 else 部分也设置高度限制
-
@TomaszCzyżak 数据不是分段的,是产品 1,2,3,1,2,1 ,顺序是完全随机的
-
else部分:if previousProductId == thisProductId {和:if thisIndexPath - 1 > -1 {
标签: ios swift uitableview