2013-07-27 1 views
0

Я создал 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; 

} 
+0

Скорее всего, вы не используете функцию dequeuing в представлении таблицы правильно. Покажите нам свой метод 'tableView: cellForRowAtIndexPath:'. –

+0

только что добавил метод ... –

+0

Я считаю, что вам не хватает 'if (cell == nil) {cell = [[[UITableViewCell alloc] init] autorelease]; } 'часть. –

ответ

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; 

} 
0

Ячейка dequeing и повторное использование значений. Если вы хотите, чтобы ячейки отображали значение, у вас есть карта источника данных, которая отображает ячейку indexpath.row в индекс в массиве