滚动后,UILabel不会在UITableViewCell中更新

时间:2013-07-18 13:40:43

标签: ios objective-c uitableview uilabel uistepper

我在动态UITableView单元格中有一个标签(quantitylbl)和一个步进器。我可以更新步进器值更新UILabel,但是当我滚动直到该单元格离开可见屏幕并再次向后滚动以显示标签时,然后在步进器值上更改,标签不会更新。在日志中,我可以看到更新的值,但标签不会更新。感谢帮助。这是代码:

- (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; 
    }
}

1 个答案:

答案 0 :(得分:0)

我认为你使用了错误的方法。您应该仅从cellForRowAtIndexPath方法更新数据。在stepperPressed方法中更改类变量self.milk1,在tableview上调用方法reloadData。

- (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];
}