2013-07-18 4 views
1

У меня есть lable (quantitylbl) и степпер внутри динамической ячейки UITableView. Я могу обновить UILabel по изменению шагового значения, но когда я прокручиваю до тех пор, пока эта ячейка не выйдет из видимого экрана и не вернется назад, чтобы отобразить метку, то при изменении шагового параметра метка не будет обновляться. В журналах я вижу обновленное значение, но метка не обновляется. Помощь приветствуется. Вот код:После прокрутки UILabel не обновляется в UITableViewCell

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    UITableViewCell *cell; 
    UIStepper *stepper; 
    UILabel *quantitylbl; 

    int sectionCount = 0; 

    if ([indexPath section] == 1) sectionCount = 10; // Manage tags 

    switch ([indexPath row]) 
    { 
     case 2: 
      cell = [self.tableView dequeueReusableCellWithIdentifier:@"Cell2"]; 
      cell.textLabel.text = @"Quantity per day"; 
      cell.selectionStyle = UITableViewCellSelectionStyleNone; 

      stepper =[[UIStepper alloc] initWithFrame:CGRectMake(200, 60, 40, 20)]; 
      [stepper setStepValue:0.25]; 
      [stepper addTarget:self action:@selector(stepperPressed:) forControlEvents:UIControlEventValueChanged]; 
      stepper.tag = indexPath.section; 

      quantitylbl = [[UILabel alloc] initWithFrame:CGRectMake(160, 12, 40, 20)]; 

      if ([indexPath section] == 0) 
       quantitylbl.text = [self.milk1 objectForKey:@"Quantity"]; //get value from dict 
      else 
       quantitylbl.text = [self.milk2 objectForKey:@"Quantity"]; 

      [stepper setValue:[quantitylbl.text doubleValue]]; 
      quantitylbl.tag = sectionCount + [indexPath row]; 

      [cell setAccessoryView:stepper]; 
      [cell addSubview:quantitylbl]; 

      break; 

} 

- (IBAction)stepperPressed:(UIStepper *)sender 
{ 
    UILabel *label; 
    UITableViewCell* cell = [sender superview]; 
    NSString* strval = [NSString stringWithFormat:@"%.2f",sender.value]; 

    if (sender.tag == 0) 
    { 
     label = (UILabel *)[cell viewWithTag:2]; 
     [self.milk1 setValue:strval forKey:@"Quantity"]; 
     label.tag = 2; 
    } 
    else 
    { 
     label = (UILabel *)[cell viewWithTag:12]; 
     [self.milk2 setValue:strval forKey:@"Quantity"]; 
     label.tag = 12; 
    } 

    if (label != nil) 
    { 
     // I see correct value here, also label is updated correctly. But when I scroll the 
     // label out of screen and bring it back, the UILabel no more gets updated though 
     // I see correct values here.  
     label.text = strval; 
    } 
} 

ответ

0

Я думаю, что вы используете неправильный подход. Вы должны обновлять данные только из метода cellForRowAtIndexPath. Измените переменную класса self.milk1 в методе stepperPressed и после вызова метода reloadData в tableview.

- (IBAction)stepperPressed:(UIStepper *)sender 
{ 
    NSString* strval = [NSString stringWithFormat:@"%.2f",sender.value]; 

    if (sender.tag == 0) 
    { 
     [self.milk1 setValue:strval forKey:@"Quantity"]; 
    } 
    else 
    { 
     [self.milk2 setValue:strval forKey:@"Quantity"]; 
    } 
    [self.tableView reloadData]; 
} 
+0

Спасибо! Это решило мою проблему, а также намного более чистый код :) – 09apps

Смежные вопросы