2012-11-15 76 views
0

我使用两个NSMutable Arrays来存储多个复选标记。repeatDaysToStoredata1。 这是viewDidLoad方法的代码...检查UITableView中的多个单元格

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]; 
} 

但它不工作。有人请告诉我什么是错的?

+4

请描述“不工作”。有什么症状? –

+0

当我选择一个单元格后,它的作品,当我选择下一个单元格时,它什么都不做,如果我点击另一个单元格,它会选择以前的单元格... – toofani

+0

我很困惑。 有没有其他的方法来实现这一点? – toofani

回答

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:

+0

thnx很多... 但没有必要删除'[tableview reloadData]' – toofani

+0

@toofani:如果你写'[tableview reloadData]'。它会在您选择每个项目时重新加载tableView。这会导致性能问题。如果它没有'[tableview reloadData]'工作。然后删除该代码:) –

+0

@Midhun ...但如果你删除'[tableView reloadData]',那么选择只有在重新加载视图后才会更改...并且单元格变成蓝色... – toofani

0

我想你需要一个不太复杂的数据结构来使这个工作易于理解。

您的表的数据应该是一个对象数组。每个对象至少应包含两个属性:一个是您要在cell.textLabel.text中显示的信息,另一个是说明是否选择该对象的BOOL属性。

当选中某行时,将BOOL设置为与当前所在行为相反并重新加载表格。在cellForRowAtIndexPath:中,只需使用所请求行的对象的当前设置,而无需通过辅助数组。

相关问题