uitableview 的最后一行中的值发生变化

Posted

技术标签:

【中文标题】uitableview 的最后一行中的值发生变化【英文标题】:Value in the last row of the uitableview changing 【发布时间】:2012-07-04 11:19:06 【问题描述】:

我有一个 UITableView,每行都有一个带有浮点值的标签。最后一行中的最后一个标签应该显示总金额。

它显示的总金额很好,但如果 tableView 滚动到屏幕外并返回,金额会增加。

 if(tableView == self.allTab)

if(indexPath.section == 0)
    
        self.firstLabel.text = @"Category";
        self.firstLabel.textColor = [UIColor redColor];
        self.secondLabel.text = @"Date";
        self.secondLabel.textColor = [UIColor redColor];
        self.thirdLabel.text = @"Amount";
        self.thirdLabel.textColor = [UIColor redColor];
      

else if(indexPath.section == 1)
    
        NSManagedObject *records = nil;
        records = [self.listOfExpenses objectAtIndex:indexPath.row];
        self.firstLabel.text = [records valueForKey:@"category"];
        NSString *dateString = [NSString stringWithFormat:@"%@",[records valueForKey:@"date"]];
        NSString *dateWithInitialFormat = dateString;
        NSDateFormatter *dateFormatter = [[NSDateFormatter alloc]init];
        [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss Z"];
        NSDate *date = [dateFormatter dateFromString:dateWithInitialFormat];
        [dateFormatter setDateStyle:NSDateFormatterMediumStyle];
        NSString *dateWithNewFormat = [dateFormatter stringFromDate:date];
        self.secondLabel.text = dateWithNewFormat;
        NSString *amountString = [NSString stringWithFormat:@"%@",[records valueForKey:@"amount"]];
        self.thirdLabel.text = amountString;
        totalAmount = totalAmount + [amountString doubleValue];
    

else if(indexPath.section == 2)

        self.firstLabel.text = @"Total";
        self.firstLabel.textColor = [UIColor redColor];
        self.thirdLabel.text = [NSString stringWithFormat:@"%.2f",totalAmount];
        self.thirdLabel.textColor = [UIColor redColor];
        self.thirdLabel.adjustsFontSizeToFitWidth = YES;


【问题讨论】:

在更新值之前生成totalAmount = 0; 我认为当您滚动 tableview 时,totalamount 会添加到之前的 totalamount 值中。 【参考方案1】:

您不应该在 cellForRowAtIndexPath 内计算总计,因为当它再次滚动时会计算总计,因此请使用其他方法计算总计,如下所示:

-(float)calculateTotal

    totalAmount = 0;
   for(int i =0;i<[self.listOfExpenses length];i++)
   
      NSManagedObject *records = nil;
        records = [self.listOfExpenses objectAtIndex:i];
      NSString *amountString = [NSString stringWithFormat:@"%@",[records valueForKey:@"amount"]];
      totalAmount = totalAmount + [amountString doubleValue];
   

 return totalAmount;
 

并将其分配如下:

 self.thirdLabel.text = [NSString stringWithFormat:@"%.2f",[self calculateTotal]];

【讨论】:

【参考方案2】:

您在哪里申报了 totalAmount?您是否将其设为实例变量?这就是它保持其价值的原因。相反,您应该在本地声明 totalAmount 并将其初始化为零。

类似:

else if(indexPath.section == 1)

    double totalAmount = 0.0;
    //.... Your code... And then Calculate totalAmount.

我认为它应该这样工作。

【讨论】:

以上是关于uitableview 的最后一行中的值发生变化的主要内容,如果未能解决你的问题,请参考以下文章

UITableView 自定义单元格更改值 iOS 9

UITableview 单元格高度在 iOS 14.0 中的滚动表视图上发生变化

如何在iOS中的UITableView的最后一行添加一行字符串?

UITableView/UIScrollView 如何自动知道 ContentSize 何时发生变化?

目标 - C:UITableView 内容在滚动时发生变化

Jerk当用户位于UITableView的底部时重新加载UITableView