滚动tableview计数标签值是否已更改?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { static NSString *simpleTableIdentifier = @"PickAClassCell"; cell = (PickAClassCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } cell.CountLabel.tag=1000; return cell; } -(void)PlusButtonSelect :(UIButton *)sender { UILabel *label1 = (UILabel *)[sender.superview viewWithTag:1000]; int count = [label1.text intValue]; count = count + 1; label1.text = [NSString stringWithFormat:@"%d",count]; NSLog(@"%@",label1); } 

这是我的代码,当我点击PlusButtonSelect计数将增加。 问题是当我的tableview滚动时,countlabel变为零。

最后我找到了答案,这里的myData是NsMutableArray。 首先基于No of Row我们可以在myData中获取第一个Zero。 在cellForRowAtIndexPath

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { static NSString *simpleTableIdentifier = @"PickAClassCell"; cell = (PickAClassCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } cell.CountLabel.text=[NSString stringWithFormat:@"%@",[myData objectAtIndex:indexPath.row]]; cell.CountLabel.tag=1000; [cell.PlusCount addTarget:self action:@selector(PlusButtonSelect :)forControlEvents:UIControlEventTouchUpInside]; return cell; } -(void)PlusButtonSelect :(UIButton *)sender { UILabel *label1 = (UILabel *)[sender.superview viewWithTag:1000]; NSLog(@"%@",label1); int count = [label1.text intValue]; count = count + 1; NSString *Strcount= [NSString stringWithFormat:@"%d",count]; [myData replaceObjectAtIndex:sender.tag withObject:Strcount]; [tableview reloadData]; } 

同样在Minusbutton也是如此。

在您的情况下,数据和可重用单元格不会绑定在一起。

您需要为每个位置的所有计数创建一个模型(可能是NSArray )。

创建cellForRowAtIndexPath ,需要从上面的数组中添加标签值。

示例代码如下所示:

 if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } cell.CountLabel.tag=1000; cell.CountLabel.text = [myData objectAtIndex:indexPath.row]; 

这是因为当您滚动tableview时,它会将单元格解除可重用性以获得更好的性能! 我的意思是tableview重新使用你的单元格,所以你的标签得到默认值或你设置的前一个值。

因此,您需要在返回cell之前每次在cellForRowAtIndexPath设置标签的值。

你可以通过数组来管理它! 从PlusButtonSelect方法中取一个数组并在其中添加对象,并在cellForRowAtIndexPath方法的label上显示它的值!

问题是由于当你滚动tableview时,由于dequeueReusableCellWithIdentifier而重新使用单元格以获得更好的性能。因此需要通过获取数组来管理之前或默认单元格值。

尝试这个

  -(void)PlusButtonSelect :(UIButton *)sender PickAClassCell *cell = (PickAClassCell *)sender.superview.; // change with your customcell class. int count = [cell. CountLabel.text intValue]; count = count + 1; label1.text = [NSString stringWithFormat:@"%d",count]; } 

这是我的演示。

 #import "ViewController.h" @interface CountModel : NSObject /** label count */ @property (nonatomic, assign) NSInteger count; @end @implementation CountModel @end @interface ViewController ()  @property (weak, nonatomic) IBOutlet UITableView *tableView; /** save model */ @property (nonatomic, strong) NSMutableArray *modelArrM; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; _modelArrM = [NSMutableArray array]; for (NSInteger i = 0; i < 5; i++) { [_modelArrM addObject:[CountModel new]]; } [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"cell"]; } #pragma mark - TableView dataSource #pragma mark -TableView --section - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } #pragma mark -TableView --row - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return _modelArrM.count; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"]; CountModel *model = _modelArrM[indexPath.row]; cell.textLabel.text = [NSString stringWithFormat:@"%ld",model.count]; cell.textLabel.userInteractionEnabled = YES; UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tap:)]; [cell.textLabel addGestureRecognizer:tap]; return cell; } - (void)tap:(UITapGestureRecognizer *)tap { UILabel *label = (UILabel *)tap.view; UITableViewCell *cell = (UITableViewCell *)label.superview; NSIndexPath *indexPath = [_tableView indexPathForCell:(UITableViewCell *)cell.superview]; CountModel *model = _modelArrM[indexPath.row]; model.count +=1; [_tableView reloadRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationNone]; } @end 

演示

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath; { NSString *simpleTableIdentifier = [NSString stringWithFormat:@"PickAClassCell%@",indexPath]; cell = (PickAClassCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier]; if (cell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"PickAClassCell" owner:self options:nil]; cell = [nib objectAtIndex:0]; } cell.CountLabel.tag=1000; return cell; } -(void)PlusButtonSelect :(UIButton *)sender { UILabel *label1 = (UILabel *)[sender.superview viewWithTag:1000]; int count = [label1.text intValue]; count = count + 1; label1.text = [NSString stringWithFormat:@"%d",count]; NSLog(@"%@",label1); } 

你需要改变细胞标识符