更改 tableView 中所有单元格的所有对象的布尔状态

Posted

技术标签:

【中文标题】更改 tableView 中所有单元格的所有对象的布尔状态【英文标题】:Change bool status for all objects of all cells in the tableView 【发布时间】:2017-10-12 19:50:08 【问题描述】:

tableView 中的每个单元格都有不同的属性:

class: Item
// properties
    var name: String
    var photo: UIImage?
    var category: String
    var instructions: String
    var completed = false

(一切都已初始化)

我的 tableView 数组是:

items = [Item]()

当 Item.complete 为 true 时,单元格将有一个复选标记附件,否则它将有 .none

我想使用 UIButton(在单独的 VC 中)为 tableView 中的每个单元格设置 Item.complete = false,从而删除所有复选标记并实质上重置数据。

我的项目:项目数组是可变的,因为用户可以选择添加或删除数组中的任何行。

我希望 UIButton(位于单独选项卡中的单独 VC 上)继续到 tableView 并进行更改。

如何使用 UIButton 将每个单元格的 .complete 属性更改为等于 false,以便删除每个单元格上的复选标记?

【问题讨论】:

您必须遍历数组并将每个项目的属性设置为false 【参考方案1】:

有一个函数可以对数组的每一项执行闭包

items.forEach $0.completed = false 
tableView.reloadData()

【讨论】:

【参考方案2】:

您也可以使用.map 函数。

您可以直接在 Playground 页面中运行它:

class Item: NSObject 
    var name: String = ""
    var completed: Bool = false


// declare items array
var items = [Item]()

// fill with 20 Items, 
// setting .completed for every-other one to true
for n in 0...19 
    let newItem = Item()
    newItem.name = "item-\(n)"
    newItem.completed = n % 2 == 0
    items.append(newItem)


// print out the items in the array
print("Original values")
for item in items 
    print(item.name, item.completed)

print()

// -- this is the .map function
// set .completed to false for every item in the array
items = items.map 
    (item: Item) -> Item in
    item.completed = false
    return item

// -- this is the .map function

// print out the items in the array
print("Modified values")
for item in items 
    print(item.name, item.completed)

然后,当然,在你的桌子上打电话给.reloadData()

【讨论】:

【参考方案3】:

遍历 items 数组并将属性设置为 false

for i in 0..<items.count 
    items[i].completed = false

完成后,重新加载您的表格视图:

tableView.reloadData()

添加如果您的问题是如何从单独的 VC 中执行此操作,那么我建议您学习 Swift 中的委托,这里是 post

【讨论】:

以上是关于更改 tableView 中所有单元格的所有对象的布尔状态的主要内容,如果未能解决你的问题,请参考以下文章

更改 tableView 单元格的高度不起作用

Tableview推送到不同的视图

更改tableView中偶数单元格的背景颜色

Swift:使用 tableView DidSelect 方法更改单元格的 UIButton 图像

当单元格的高度不同时,如何在表格视图中获取所有单元格的高度?

当我滚动时,TableView 只加载一个单元格的内容