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

时间:2017-10-12 19:50:09

标签: ios arrays swift uitableview

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,以便我可以删除每个单元格上的复选标记?

3 个答案:

答案 0 :(得分:0)

循环items items并将property设置为false

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

完成后,重新加载您的tableview:

tableView.reloadData()

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

答案 1 :(得分:0)

您也可以使用.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()

答案 2 :(得分:0)

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

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