2013-05-14 4 views
2

J'utilise UIPickerView dans UITableView pour choisir la valeur entière. Je ne comprends pas comment définir la valeur de l'étiquette dans la cellule en particulier. Ci-dessous est mon code:UIPickerView dans UITableViewCell: problème lors de l'affichage de la valeur dans une cellule particulière

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
static NSString *CellIdentifier = @"Cell"; 
UITableViewCell *cell; 
cell = [self.mTicketTable dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
else{ 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 

cell.backgroundView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:@"cell.bg.png"]]; 
cell.selectionStyle = UITableViewCellSelectionStyleNone; 

lblType = [[UILabel alloc]initWithFrame:CGRectMake(10, 15, 90, 30)]; 
lblPrice = [[UILabel alloc]initWithFrame:CGRectMake(140, 15, 90, 30)]; 
lblSeat = [[UILabel alloc]initWithFrame:CGRectMake(232, 21, 52, 26)]; 
lblSeat.text = strSelected; 
lblSeat.tag = indexPath.row+1; 
lblSeat.textColor = [UIColor lightGrayColor]; 
lblSeat.textAlignment = NSTextAlignmentCenter; 
lblSeat.backgroundColor = [UIColor clearColor]; 
UIButton *btnPicker = [UIButton buttonWithType:UIButtonTypeCustom]; 
[btnPicker setImage:[UIImage imageNamed:@"drop_down.png"] forState:UIControlStateNormal]; 
[btnPicker addTarget:self action:@selector(pickseats:) forControlEvents:UIControlEventTouchUpInside]; 
btnPicker.frame = CGRectMake(232, 20, 80, 30); 

self.mPickerView = [[UIPickerView alloc] init]; 
self.mPickerView.frame = CGRectMake(228, 100, 90, 60); 
self.mPickerView.showsSelectionIndicator = YES; 
self.mPickerView.delegate = self; 
self.mPickerView.dataSource = self; 
[self.mPickerView setNeedsLayout]; 
self.mPickerView.transform = CGAffineTransformMakeScale(0.75f, 0.75f); 
self.mPickerView.hidden = TRUE; 
[self.view addSubview:self.mPickerView]; 

lblType.text = [arrType objectAtIndex:indexPath.row]; 
if([arrCost count] == 0) 
{ 
    lblPrice.text = @"0"; 
} 
else{ 
lblPrice.text = [arrCost objectAtIndex:indexPath.row]; 
} 
[cell addSubview:lblType]; 
[cell addSubview:lblPrice]; 
[cell addSubview:btnPicker]; 
[cell addSubview:lblSeat]; 

return cell; 
} 

-(NSInteger) numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
return 1; 
} 

-(NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
return 10; 
} 

-(NSString *) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
return [numbers objectAtIndex:row]; 
} 

-(void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
strSelected = [numbers objectAtIndex:row]; 
NSLog(@"str selection:%@", strSelected); 
self.mPickerView.hidden = TRUE; 
[self.mTicketTable reloadData]; 
} 

S'il vous plaît guider pour ce qui précède.

Merci d'avance.

+0

qu'est ce que c'est [self.view addSubview: self.mPickerView]; et si (cellule = nil) { cellule = [[UITableViewCell alloc] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; } else { cell = [[UITableViewCell alloc]] initWithStyle: UITableViewCellStyleDefault reuseIdentifier: CellIdentifier]; } –

+0

Vous ajoutez une sélection dans self.View dans la méthode cellforrowatIndexpath ... qui ne peut pas fonctionner .. –

Répondre

2

Selon moi ce que vous pouvez faire est:

tout d'abord tag attribuons à votre btnPicker et lblSeat comme

btnPicker.tag = indexPath.row; 
lblSeat.tag = 11111; 

Ensuite, dans la méthode didSelectRow pour pickerView attribuer une valeur sélectionnée à votre tableau.

-(void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    int index = pickerView.tag; 
    strSelected = [numbers objectAtIndex:row]; 
    NSIndexPath *path = [NSIndexPath indexPathForRow:index inSection:0]; 

    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:path]; 

    for (UIView* tempView in [cell subviews]) { 
     if ([tempView isKindOfClass:[UILabel class]]) { 
      if (tempView.tag == 11111) { 
       UILabel *lblTemp = (UILabel *)tempView; 
       lblTemp.text = strSelected; 
       break; 
      } 
     } 
    } 

    self.mPickerView.hidden = TRUE; 
} 

Remplacer méthode pickseats:

-(void)pickseats:(id)sender 
{ 
    UIButton *btn = (UIButton *) sender; 
    self.mPickerView.tag = btn.tag; 
    self.mPickerView.hidden = FALSE; 
} 

Je pense que cela va fonctionner. Si ce n'est pas juste faites le moi savoir. THNKS.

+0

Il donne la propriété d'erreur lblSeat not found. –

+0

@iPhone: maintenant vérifier ... je l'ai édité .... en cas de cellule personnalisée ce que j'ai écrit plus tôt fonctionnera ..... mais maintenant essayé un édité .... –

+0

Il y a quelques index liés problème je pense, la façon dont vous avez fait int index = pickerView.tag donnant une erreur dans la conversion implicite de la ligne "UITableViewCell * cellule" en NSIndexPath est interdite avec ARC. –

Questions connexes