当单元格滚出视图时,TableViewCell的textLabel值将返回1

时间:2012-01-11 04:33:56

标签: iphone ios ipad uitableview ipod

我有一个表视图,我可以在其中添加1或减去1 cell.textLabel.text的值,但是当我切换视图并返回或滚动视图中的单元格时,以及当它返回视图时,textLabel的值返回1,这是最初的起点!请帮忙!以下是添加和减去1的代码:

 - (IBAction)addLabelText:(id)sender{

    cell = (UITableViewCell*)[sender superview]; // <-- ADD THIS LINE

        cell.textLabel.text = [NSString stringWithFormat:@"%d",[cell.textLabel.text  
                                                                intValue] +1];

}


- (IBAction)subtractLabelText:(id)sender
{
   cell = (UITableViewCell *)[sender superview];        
    if ( [[cell.textLabel text] intValue] == 0){ 
        cell.textLabel.text = [NSString stringWithFormat:@"%d",[cell.textLabel.text intValue] +0];
    }
    else{
        cell.textLabel.text = [NSString stringWithFormat:@"%d",[cell.textLabel.text intValue] -1];
    }
}

4 个答案:

答案 0 :(得分:2)

发生这种情况是因为,细胞将在滚动时重复使用。将调用表视图的数据源方法,因此值将重置为原始值。您可以将NSNumber的数组维护为tableview的数据源(在cellForRowAtIndexpath:中,从数组中设置单元格标签的文本)。每次需要添加或减去时,请执行相应的NSNumber obj并重新加载tableview。

答案 1 :(得分:1)

您没有更新数据模式。这就是它采用原始内容价值的原因。

答案 2 :(得分:1)

似乎每次都要分配一个新的单元格而不使用单元格重新使用方法。 在您的情况下,当您对先前的值执行算术运算并且没有用于存储先前值的数组时。解决此问题的最简单方法是使您的Cell-Identifier独一无二。 (类似@“Cell-%d”,indexPAth.row)

注意:但是,更有效的方法是将结果保存到填充数据的数组中,而不会使单元标识符唯一。

答案 3 :(得分:0)

更改后,单元格文本值会重新加载tableview [self.tableview reloadData]