Jon*_*rft 0 cocoa-touch objective-c uitableview ios
我想要实现的目标:
我有一个UITableView,我想检查表是否被选中,并保持一个数组容易访问对应于该行的YES或NO值,以便之后我可以操作数据.
我的代码如下
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSUInteger row = [indexPath row];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSString *cellLabelText = cell.textLabel.text;
if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
cell.accessoryType = UITableViewCellAccessoryNone;
selected[row] = NO;
}
else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
selected[row] = YES;
}
}
Run Code Online (Sandbox Code Playgroud)
因为它突出我可以创建一个BOOL selected[some value]但我的问题是我需要的最大索引是未知的,因为我的表大小不断变化.因此设置最大索引限制了我.
我是目标C的新手,我来自PHP背景,因此我不知道是否有可能创建一个数组来完成我想在objective-c中做的事情.
否则,在objective-c中我有什么选择可以轻松写入/读取 selected[row] = YES/NO.
我需要一种方法来编写YES/NO并将其链接到indexpath.row
使用NSMutableSet并存储NSIndexPath选定的行.如果选择一行,则添加该集的路径.如果取消选择行,请从集中删除路径.
要查看是否选择了行,请查看indexPath是否在集合中.
BTW - 这仅在行被修复时才有效.如果用户可以添加,删除或重新排序行,则此方法将不起作用.在这种情况下,您需要存储数据键,而不是索引路径.
创建一个类型的ivar NSMutableSet.我们称之为selectedRows:
selectedRows = [[NSMutableSet alloc] init];
Run Code Online (Sandbox Code Playgroud)
然后在didSelectRow你做:
- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
BOOL selected = [selectedRows containsObject:indexPath];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSString *cellLabelText = cell.textLabel.text;
if (selected) {
cell.accessoryType = UITableViewCellAccessoryNone;
[selectedRows removeObject:indexPath];
} else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[selectedRows addObject:indexPath];
}
}
Run Code Online (Sandbox Code Playgroud)
在你的cellForRow...方法中你做了类似的事情:
BOOL selected = [selectedRows containsObject:indexPath];
cell.accessoryType = selected ? UITableViewCellAccessoryCheckmark : UITableViewCellAccessoryNone;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1122 次 |
| 最近记录: |