更改 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 中所有单元格的所有对象的布尔状态的主要内容,如果未能解决你的问题,请参考以下文章
Swift:使用 tableView DidSelect 方法更改单元格的 UIButton 图像