我使用两个NSMutable Arrays来存储多个复选标记.. repeatDaysToStore 和 data1 。 这是viewDidLoad方法中的代码...
for (int i=1; i<=[repeatDaysToStore count]; i++)
{
BOOL isTheObjectThere = [repeatArray containsObject:[repeatDaysToStore objectAtIndex:(i-1)]];
if (isTheObjectThere)
{
NSString *into=[repeatArray objectAtIndex:[repeatArray indexOfObject:[repeatDaysToStore objectAtIndex:(i-1)]]];
[data1 addObject:into];
NSLog(@"check did load");
}
}
之后我使用data1数组来检查单元格......
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
cell.textLabel.text=[repeatArray objectAtIndex:indexPath.row];
tableView.allowsMultipleSelection=YES;
for (int j=1; j<=[data1 count]; j++) {
NSLog(@"%d",[[data1 objectAtIndex:(j-1)]intValue]);
NSLog(@"%d",indexPath.row);
if([data1 indexOfObject:[data1 objectAtIndex:(j-1)]]==indexPath.row)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
并且用于处理行选择我在didSelectRowAtIndexPath中使用此代码 { NSString * myobj = [repeatArray objectAtIndex:indexPath.row];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
cell.accessoryType = UITableViewCellAccessoryNone;
[repeatDaysToStore removeObject:myobj];
[data1 removeObject:myobj];
} else {
cell.accessoryType = UITableViewCellAccessoryCheckmark;
[repeatDaysToStore addObject:myobj];
[data1 addObject:myobj];
}
[tableView reloadData];
}
但它不起作用。有人请告诉我有什么问题?
答案 0 :(得分:0)
我认为问题在于cellForRowAtIndexPath:
方法的以下代码:
for (int j=1; j<=[data1 count]; j++)
{
NSLog(@"%d",[[data1 objectAtIndex:(j-1)]intValue]);
NSLog(@"%d",indexPath.row);
if([data1 indexOfObject:[data1 objectAtIndex:(j-1)]]==indexPath.row)
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
}
删除代码并编写如下条件:
if([data1 containsObject:[repeatArray objectAtIndex:indexPath.row])
{
cell.accessoryType = UITableViewCellAccessoryCheckmark;
}
else
{
cell.accessoryType = UITableViewCellAccessoryNone;
}
同时从[tableView reloadData];
didSelectRowAtIndexPath:
答案 1 :(得分:0)
我认为您需要一个不太复杂的数据结构,以便以易于理解的方式工作。
表的数据应该是一个对象数组。每个对象应至少包含两个属性:一个是您要在cell.textLabel.text
中显示的信息,另一个是BOOL
属性,表示该对象是否被选中。
选择行时,将BOOL
设置为与当前相反的值并重新加载表格。在cellForRowAtIndexPath:
中,只需使用对象的当前设置,而无需通过辅助数组。