如何使用 UITableViewCellAccessoryCheckmark 取消选中所有行
我有一个 UITableView
,每行都包含一个使用 UITableViewCellAccessoryCheckmark
的复选框。我不知道如何使用 didSelectRowAtIndexPath
方法取消选中所有复选框。
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *oldCell;
int count = [self.myTableRowNamesArray count];
for (NSUInteger i = 0; i < count; ++i) {
// Uncheck all checkboxes
// OF COURSE THIS DOESN'T WORK
// BECAUSE i IS AN INTEGER AND INDEXPATH IS A POINTER
FOO: oldCell = [myTableView cellForRowAtIndexPath:(int)i];
// GOOD CODE:
oldCell = [penanceOptionsTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
oldCell.accessoryType = UITableViewCellAccessoryNone;
}
UITableViewCell *newCell = [myTableView cellForRowAtIndexPath:indexPath];
newCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
I've got a UITableView
with each row containing a checkbox using UITableViewCellAccessoryCheckmark
. I can't figure out how to uncheck all the checkboxes using the didSelectRowAtIndexPath
method.
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *oldCell;
int count = [self.myTableRowNamesArray count];
for (NSUInteger i = 0; i < count; ++i) {
// Uncheck all checkboxes
// OF COURSE THIS DOESN'T WORK
// BECAUSE i IS AN INTEGER AND INDEXPATH IS A POINTER
FOO: oldCell = [myTableView cellForRowAtIndexPath:(int)i];
// GOOD CODE:
oldCell = [penanceOptionsTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:i inSection:0]];
oldCell.accessoryType = UITableViewCellAccessoryNone;
}
UITableViewCell *newCell = [myTableView cellForRowAtIndexPath:indexPath];
newCell.accessoryType = UITableViewCellAccessoryCheckmark;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我建议不要修改
didSelectRowAtIndexPath:
中所有单元格的.accessoryType
,而是在某些 ivar 中存储所选索引,并更改数据源的
,即-tableView:cellForRowAtIndexPath:
方法中的 .accessoryType只有可见单元格才会受到影响,屏幕外的数百万个其他单元格将不需要受到影响修改的。
完全正确,这是在选择单元格的一般情况下在 Swift 中的完整实现。您可以在类中的其他地方使用您认为合适的 selectedIndexPath 。例如,在
cellForRowAtIndexPath
中选择适当的单元格原型。Instead of modifying the
.accessoryType
of all cells indidSelectRowAtIndexPath:
, I suggest storing the selected index in some ivar, and change the.accessoryType
in the data source's-tableView:cellForRowAtIndexPath:
method, i.e.With this, only visible cells will be affected, and the million other cells outside of the screen won't need to be modified.
Quite right, here's a full implementation in Swift in the general case of selecting a cell .. you'd use selectedIndexPath elsewhere in the class as you see fit. For example, in
cellForRowAtIndexPath
to choose the appropriate cell prototype.但实际上,您最好只修改实际设置了复选标记的一个单元格。无论如何,您必须将此信息存储在模型中的某个位置。
But really, you'd be better off just modifying the one cell that actually has the checkmark set. You have to have stored this information somewhere in your model anyway.
您可能正在使用此方法设置某种属性。
所以我要做的是:
在我的 cellForRowAtIndexPath 方法中,我得到类似以下代码的内容:
You're probably setting some kind of property with this method.
So what i do is:
And in my cellForRowAtIndexPath methods i got something like the following code:
是的,
cellForRowAtIndexPath:
使用NSIndexPath
而不是整数,因此如果您使用的是一个部分,则通过使用来创建索引路径,那么您的循环就可以了,只需在行中传递 i 并在部分中传递 0 即可。
Yes,
cellForRowAtIndexPath:
usesNSIndexPath
instead of integer so make indexpath by usingif you are using one section then your loop is fine just pass i in row and 0 for section.