UIStepper不更新相应的标签

我有一个UIStepper控件,我在我的UITableViewCell编程创build。 我也为这个单元格编程创build了一个UILabel 。 最近发生的事情是,按下步进器时正在访问位于不同的单元格,即索引path1而不是0的UILabel 。这里是代码。

 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ ... //---------UIStepper Creation-------------------// stepper = [[UIStepper alloc]init]; [stepper setFrame:CGRectMake(220.0f, 65.0f, 0.0f, 0.0f)]; [stepper setTag: indexPath.row]; [stepper addTarget:self action:@selector(stepperPressed:) forControlEvents:UIControlEventValueChanged]; stepperLabel = [[UILabel alloc] init]; [stepperLabel setFrame:CGRectMake(105,70, 20, 20)]; [stepperLabel setTextColor:[UIColor whiteColor]]; [stepperLabel setBackgroundColor:[UIColor clearColor]]; [stepperLabel setTag:stepper.tag]; [stepperLabel setText:[NSString stringWithFormat: @"%d", (int) [stepper value]]]; stepperLabel.lineBreakMode = UILineBreakModeWordWrap; stepperLabel.numberOfLines = 1;//Dynamic //Set min and max [stepper setMinimumValue:0]; [stepper setMaximumValue:4]; // Value wraps around from minimum to maximum [stepper setWraps:YES]; [stepper setContinuous:NO]; // To change the increment value for each step ... [cell addSubview:stepperLabel]; [cell addSubview:stepper]; return cell; 

这里是我需要执行的行动

 -(void) stepperPressed:(UIStepper *)sender{ NSIndexPath *indexPath = [self.tableView indexPathForCell:(UITableViewCell *)[sender superview]]; int row = indexPath.row; NSLog(@"stepper is in row %d",row); NSLog(@"stepperLabel is in row %d",stepperLabel.tag); double value = [sender value]; if(sender.tag ==row){ [stepperLabel setText:[NSString stringWithFormat: @"%d", (int) value]]; } } 

认真需要一些帮助的人

stepperLabel将始终指向您在cellForRowAtIndexPath中创build的最后一个Cell的标签。 所以你不能这样使用它。

编辑答案:

 - (void)viewDidLoad { [super viewDidLoad]; valueArray=[[NSMutableArray alloc]initWithObjects:[NSNumber numberWithInt:0],[NSNumber numberWithInt:0],[NSNumber numberWithInt:0], nil]; //Array Count = } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; UILabel *label = [[UILabel alloc]initWithFrame:CGRectMake(10.0f, 10.0f, 100.0f, 21.0f)]; [cell addSubview:label]; [label setTag:456]; UIStepper *stepper = [[UIStepper alloc]initWithFrame:CGRectMake(110.0f, 10.0f, 20.0f, 20.0f)]; [cell addSubview:stepper]; [stepper setTag:123]; [stepper addTarget:self action:@selector(stepperChanged:) forControlEvents:UIControlEventValueChanged]; } [cell setTag:indexPath.row]; int count = [[valueArray objectAtIndex:indexPath.row] intValue]; [(UIStepper*)[cell viewWithTag:123] setValue:count]; [(UILabel*)[cell viewWithTag:456] setText:[NSString stringWithFormat:@"%@: %d", @"Stepper", count]]; return cell; } - (void)stepperChanged:(UIStepper*)sender { int row = [sender.superview tag]; int value = (int)[sender value]; NSLog(@"Stepper%d = %d", row,value); [valueArray replaceObjectAtIndex:row withObject:[NSNumber numberWithInt:value]]; [(UILabel*)[(UITableViewCell *)sender.superview viewWithTag:456] setText:[NSString stringWithFormat:@"%@: %d", @"Stepper", value]]; }