0

我正在尝试在 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在有类似帖子的水龙头处添加了额外的复选标记,但我已经使用了 dequeueReusableCellWithIdentifier:CellIdentifier。

任何人都可以帮助我吗?

4

1 回答 1

0

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

只需替换 cellForRowAtIndexPath::

static NSString *CellIdentifier = @"Cell";

和:

NSString *CellIdentifier = [NSString stringWithFormat:@"MyReuseIdentifier %d",indexPath.row];
于 2013-05-10T07:00:53.260 回答