在UITableView选择列表中,两行标记为一行

时间:2013-05-09 07:54:21

标签: uitableview selection checkmark reuseidentifier

我正在尝试在UITableView中执行选择列表,但每当我点击一行时,都会标记两行。例如,如果我点击第一行,它会为row = 0和row = 11添加一个复选标记。我认为问题是由重复使用单元格引起的,但我不明白如何解决它。

我附上我的代码.h:

@interface tabellaViewController : UITableViewController
    @property (nonatomic, strong) NSArray *listaingredienti;
@end

和我的代码.m:

- (void)viewDidLoad
{
[super viewDidLoad];
_listaingredienti = [NSArray arrayWithObjects:@"formaggio", @"crudo", @"pomodorini", @"fossa", @"bresaola", @"funghi", @"salame", @"fontina", @"rucola", @"radicchio", @"peperoni", @"ciccioli", @"squacquerone", @"gorgonzola", @"salsiccia", @"cipolla", @"feta", @"acciughe", @"pecorino",  nil];
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return [_listaingredienti count];
}


- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}

cell.textLabel.text = [_listaingredienti objectAtIndex:indexPath.row];

return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:[tableView indexPathForSelectedRow]
                            animated:NO];
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
if (cell.accessoryType == UITableViewCellAccessoryNone) {
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
} else if (cell.accessoryType == UITableViewCellAccessoryCheckmark) {
    cell.accessoryType = UITableViewCellAccessoryNone;
    }
}

我见过UITableView didSelectRowAtIndexPath add additional checkmark at tap其中有类似帖子,但我已经使用了dequeueReusableCellWithIdentifier:CellIdentifier。

任何人都可以帮助我?

1 个答案:

答案 0 :(得分:0)

确定, 我刚刚解决了我的问题。实际上,问题在于重用单元格,但是这段代码修复了它。

只需在cellForRowAtIndexPath ::

中替换
static NSString *CellIdentifier = @"Cell";

使用:

NSString *CellIdentifier = [NSString stringWithFormat:@"MyReuseIdentifier %d",indexPath.row];