我正在使用引用为“stateArray”的NSMutableArray
。 stateArray需要简单地保存我的单元格的BOOL
值,以确定它们是否被选中。这是我的代码..
状态阵列在我的.h:
@property (nonatomic, strong) NSMutableArray *stateArray;
然后stateArray 不是合成的。它需要在整个数组中填充NO
,以便在单元格被选中时,NO可以替换为YES。目前,此代码为每个单元格的stateArray打印0(NSLog位于if (showCheckmark == YES)
的{{1}})。
cellForRowAtIndexPath:
答案 0 :(得分:2)
要跟踪所选项目,请使用Dictionary
代替NSMutableArray
,并将indexPath.row
保留为键,并选择相应的值< /强>
此外,您可以使用BOOL's
数组执行这些操作,而不是按以下方式更新代码。
@property (nonatomic, strong) NSMutableDictionary * selectedRowCollection;
- (void)viewDidLoad{
self.selectedRowCollection = [[NSMutableDictionary alloc] init];
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
{
id object = contactsObjects[indexPath.row];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryNone)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[self.selectedRowCollection setObject:@"1" forKey:[NSString stringWithFormat:@"%d",indexPath.row]];
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
[self.selectedRowCollection removeObjectForKey:[NSString stringWithFormat:@"%d",indexPath.row]];
}
//slow-motion selection animation.
[tableView deselectRowAtIndexPath:indexPath animated:YES];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
BOOL showCheckmark = [[self.selectedRowCollection valueForKey:[NSString stringWithFormat:@"%d",indexPath.row]] boolValue];
if (showCheckmark == YES)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
注意:请勿忘记在重新加载新的tableview数据集时从字典中删除字典项。
答案 1 :(得分:1)
BOOL
值包含NSNumber
,这就是你得到0的原因:
_stateArray = [NSMutableArray array];
for (int i = 0 ; i != contactsObjects.count ; i++) [_stateArray addObject:@(NO)];
BOOL showCheckmark = [[_stateArray objectAtIndex:indexPath.row] boolValue];
if (showCheckmark == YES)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
NSLog(@"It hit showCheckmark = YES, and stateArray is %@",[[_stateArray objectAtIndex:indexPath.row] boolValue] ? @"YES" : @"NO");
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
NSLog(@"It hit showCheckmark = NO, and stateArray is %@",[[_stateArray objectAtIndex:indexPath.row] boolValue] ? @"YES" : @"NO");
}
BOOL
不是对象,因此您无法使用%@
格式说明符。你需要手动处理这个
答案 2 :(得分:0)
试试这个,
更新您的循环以通过
填充_stateArray
for (int i = 0 ; i != contactsObjects.count ; i++) {
[_stateArray addObject:[NSNumber numberWithBool:NO]];
}