gpt4 book ai didi

ios - 在 Swift 2 中删除 UITableView 中的所有单元格附件

转载 作者:行者123 更新时间:2023-11-28 06:57:13 26 4
gpt4 key购买 nike

我在 Objective-C 中有一个方法用于取消选中 UITableView 中的所有单元格:

- (void)resetCheckedCells {
for (NSUInteger section = 0, sectionCount = self.tableView.numberOfSections; section < sectionCount; ++section) {
for (NSUInteger row = 0, rowCount = [self.tableView numberOfRowsInSection:section]; row < rowCount; ++row) {
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:row inSection:section]];
cell.accessoryType = UITableViewCellAccessoryNone;
cell.accessoryView = nil;
}
}
}

在 Swift 中,我想我需要使用枚举来完成这个。我对如何获得我需要的值(value)感到困惑。这是我正在尝试做的事情的“诗人物理学”草图:

func resetCheckedCells() {
// TODO: figure this out?
for (section, tableView) in tableView.enumerate() {
for (row, tableView) in tableView {
let cell = UITableView
cell.accessoryType = .None
}
}
}

这行不通,但它说明了我正在努力完成的事情。我错过了什么?

更新

有一个非常简单但不明显(对我来说)的方法涉及 cellForRowAtIndexPath 和一个全局数组...

var myStuffToSave = [NSManagedObject]()

...这是用 UITableViewController 加载实例化的。我发布此更新是希望对其他人有所帮助。

我的 UITableViewController 最初填充了 NSManagedObjects。我的 didSelectRowAtIndexPath 做了两件事:

1) 从全局 myStuffToSave 数组中添加/删除 NSManagedObjects

2) 在 .Checkmark.None 之间切换单元格的 cell.accessoryType

cellForRowAtIndexPath 被调用时,我将 myStuffToSave 中的项目与 tableView 中的项目进行比较。

这是我的 cellForRowAtIndexPath 的片段:

override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath)

// I set the cells' accessory types to .None when they're drawn
// ** SO RELOADING THE tableView NUKES THE CHECKMARKS WITH THE FOLLOWING LINE... **
cell.accessoryType = .None

// boilerplate cell configuration

// Set checkmarks
// ** ...IF THE ARRAY IS EMPTY
if self.myStuffToSave.count > 0 {
// enumerate myStuffToSave...
for (indexOfMyStuffToSave, thingToSave) in stuffToSave.enumerate() {
// if the object in the array of stuff to save matches the object in the index of the tableview
if stuffInMyTableView[indexPath.row].hashValue == stuffToSave[indexOfMyStuffToSave].hashValue {
// then set its accessoryView to checkmark
cell.accessoryType = .Checkmark
}
}
}
return cell
}

因此从 myStuffToSave 中删除所有内容并重新加载 tableView 将重置所有选中的单元格。这是我的 resetCheckedCells 方法最后的样子:

func resetCheckedCells() {
// remove everything from myStuffToSave
self.myStuffToSave.removeAll()
// and reload tableView where the accessoryType is set to .None by default
self.tableView.reloadData()
}

感谢@TannerNelson 为我指明了解决方案。

最佳答案

这似乎是一种使用 UITableView 的奇怪方式。

您应该查看 UITableViewDataSource 协议(protocol)并使用它实现您的代码。

您需要实现的主要功能是tableView:cellForRowAtIndexPath。在此函数中,您出队并返回一个单元格。

然后当您需要更新要选中或取消选中的单元格时,您只需调用 reloadAtIndexPaths: 并传递可见的索引路径即可。

这个要点有一个很好的 UITableView 扩展,用于使用 self.tableView.reloadVisibleCells() 重新加载可见单元格

https://gist.github.com/tannernelson/6d140c5ce2a701e4b710

关于ios - 在 Swift 2 中删除 UITableView 中的所有单元格附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33153062/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com