检查UITableView中的多个单元格

时间:2012-11-15 12:56:06

标签: objective-c ios xcode

我使用两个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];
 }

但它不起作用。有人请告诉我有什么问题?

2 个答案:

答案 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:中,只需使用对象的当前设置,而无需通过辅助数组。