我创建了一个包含2个标签和1个UIStepper的单元格(动态)的UITableView。其中一个标签与UIStepper的值同步。到目前为止,非常好。
当UIStepper的值发生变化时,这就是我的代码:
- (IBAction)stepper:(id)sender {
UITableViewCell *cell = (UITableViewCell *)[[sender superview] superview];
NSIndexPath *indexPath = [self.tableView indexPathForCell:cell];
int row = indexPath.row;
// I just determined in which row the user tapped the UIStepper.
UIStepper *stepper = (UIStepper *)[cell viewWithTag:300];
UILabel *menge = (UILabel *)[cell viewWithTag:100];
int anzahl = stepper.value;
menge.text = [NSString stringWithFormat:@"%i",anzahl];
// and the label just got synced with the UIStepper value
[_mengen insertObject:[NSString stringWithFormat:@"%i",anzahl] atIndex:row];
// and the value got saved for further calculations
}
在第一行中按下UIStepper的 + 之后,可变数组 mengen 如下所示:
(
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
)
正是这样,我预料到了!
但是不仅第一行中的标签 menge 被设置为1,第八行中的标签也被设置为1。如果我按第二行中的 + ,则第二行和第九行中的标签会发生变化,依此类推。
为什么会这样?
更新:cellForRowAtIndexPath方法
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
UILabel *artikel = (UILabel *)[cell viewWithTag:200];
cell.selected = NO;
[artikel setText:[_artikel objectAtIndex:[indexPath row]]];
return cell;
}
答案 0 :(得分:0)
单元格正在出列并重用值。如果您希望单元格反映该值,请使用将单元格indexpath.row映射到数组中的索引的数据源映射
答案 1 :(得分:0)
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
UILabel *artikel = (UILabel *)[cell viewWithTag:200];
cell.selected = NO;
[artikel setText:[_artikel objectAtIndex:[indexPath row]]];
// Add this
UILabel *menge = (UILabel *)[cell viewWithTag:100];
// As cell may have been reused menge already many have some value.
// Initialize menge with an appropriate value
menge.text = @"";
return cell;
}