2012-06-16 3 views
1

У меня есть UIStepper элемент управления, который я создал программно в моем UITableViewCell. Я также создал программно UILabel для ячейки. происходит то, что шагомер при нажатии получает доступ к UILabel, расположенному в другой ячейке, то есть путь индекса 1, а не 0. вот код.UIStepper не обновляет соответствующую метку

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

серьезно нужна помощь ребята

+0

Так что же происходит? Является 'stepperPressed:' выполнение? Является ли 'sender.tag == row' когда-либо истинным? Что вы регистрируете? –

+0

выполняется нажатием шага, но оператор условия работает некорректно. – KING

ответ

5

stepperLabel всегда будет указывать на этикетке на последней ячейке, созданной в cellForRowAtIndexPath. Так что вы не можете использовать его таким образом.

Отредактировано Ответ:

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

Я использовал ваш пример, но в моем журнале один и тот же шагомер находится в строке 0 stepperLabel находится в строке 1 – KING

+0

Вы правы, пожалуйста, проверьте мой отредактированный ответ ... – xapslock

+0

Xapslock СПАСИБО ВАМ мой друг. Я пытался выяснить эту проблему в течение нескольких дней. Iv только программировал около 9 месяцев, а iv выполнял Objective-C менее месяца. Спасибо за вашу помощь. – KING

 Смежные вопросы

  • Нет связанных вопросов^_^