Я создал UITableView, содержащий ячейки (динамические) с двумя ярлыками и 1 UIStepper. Одна из этих ярлыков синхронизируется со значением UIStepper. Все идет нормально.Странное поведение ячеек UITableView
Это то, что мой код выглядит следующим образом, когда значение изменяется 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
}
изменяемый массив Mengen выглядит следующим образом, после нажатия + в UIStepper в первом ряду :
(
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0
)
Именно это я и ожидал!
НО не только метка Менге в первом ряду был установлен в 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;
}
Скорее всего, вы не используете функцию dequeuing в представлении таблицы правильно. Покажите нам свой метод 'tableView: cellForRowAtIndexPath:'. –
только что добавил метод ... –
Я считаю, что вам не хватает 'if (cell == nil) {cell = [[[UITableViewCell alloc] init] autorelease]; } 'часть. –