我正在尝试在 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。
任何人都可以帮助我吗?