Ios TableView单元格未更新

Ios TableView单元格未更新,ios,swift,uitableview,Ios,Swift,Uitableview,我试图根据结构的bool属性更新自定义单元格中的标签,但是它似乎只更新一次 在数组中创建新对象时,我将其设置为false。当属性稍后设置为true时,单元格会相应更新。当我将其设置回false时,单元格不会改变。逻辑中的Print语句表明这两个条件都得到了正确的满足,所以我不明白为什么单元格不会“更改回”。 谢谢 按下更改布尔值的按钮:(sender.tag来自另一个tableView,但工作正常) 细胞被重复使用。如果isActive为false,则不会对单元格执行任何操作,因此单元格将保留其

我试图根据结构的bool属性更新自定义单元格中的标签,但是它似乎只更新一次

在数组中创建新对象时,我将其设置为false。当属性稍后设置为true时,单元格会相应更新。当我将其设置回false时,单元格不会改变。逻辑中的Print语句表明这两个条件都得到了正确的满足,所以我不明白为什么单元格不会“更改回”。 谢谢

按下更改布尔值的按钮:(sender.tag来自另一个tableView,但工作正常)


细胞被重复使用。如果
isActive
为false,则不会对单元格执行任何操作,因此单元格将保留其以前的值。此外,不需要重新加载整个tableview;您最好只是重新加载受影响的行。您可以使用
.toggle
切换布尔值。如果单元格被重新排序,使用
标记
属性也会导致问题。@Paulw11;谢谢你的意见。如果是假的话,最好的办法是什么?如果是假的话,你想要什么?一个空白的
mealName
-根本没有单元格?不清楚你想要的行为是什么,根本没有细胞。我以前使用两个数组构建了这个概念,一个是“活动”数组,另一个是“潜在”数组,而讨论中的mealTableView只需填充“活动”数组即可。然而,事实证明它太麻烦了,所以我尝试让这个bool属性方法工作。因此,如果bool是真的,食物在细胞中被看到,如果是假的,它就不会出现;您将始终拥有
numberOfRows
返回的行数。您可以清除名称文本,但不能基于值为
false
struct Meal: Codable {
    var name: String
    var arrayOfDishes: [Dish]
}

struct Dish: Codable {
    var name: String
    var isActive: Bool
    var arrayOfSteps: [Step]
}

//inside cellForRowAt (I have multiple tableViews within one VC)

case mealTableView:

                    let cell = tableView.dequeueReusableCell(withIdentifier: "CustomMealCell", for: indexPath)
                    as! MealTableViewCell

                    if meal.arrayOfDishes.isEmpty {
                        cell.mealName.text = ""
                        return cell
                    } else {
                        if meal.arrayOfDishes[indexPath.row].isActive == true {
                            cell.mealName.text = meal.arrayOfDishes[indexPath.row].name
                            return cell
                        } else if meal.arrayOfDishes[indexPath.row].isActive == false {
                            return cell
                        }
                    return cell
            }
@objc func onClickedDishBtn(sender: UIButton) {
    if meal.arrayOfDishes[sender.tag].isActive == false {
        meal.arrayOfDishes[sender.tag].isActive = true
    } else if meal.arrayOfDishes[sender.tag].isActive == true {
        meal.arrayOfDishes[sender.tag].isActive = false
    }

    mealTableView.reloadData()