2010-02-18 10 views
2

J'ai deux UIPickerViews mis en place sur une vue sous le même contrôleur de vue. Le sélecteur semble être rempli de valeurs comme prévu. J'ai aussi une étiquette pour chaque sélecteur. L'étiquette est mise à jour à chaque changement de valeur, mais la valeur affichée sur l'étiquette n'est pas correcte. Il est toujours désactivé par 10. Les codes sont ci-dessous.iPhone - Étiquette de mise à jour de UIPickerView

Interface:

#import <UIKit/UIKit.h> 
#import "InfoViewController.h" 



@interface TransactionsViewController : UIViewController { 

    //Deposit 
    NSMutableArray *depositArray; 
    IBOutlet UIPickerView *depositPicker; 
    IBOutlet UILabel *depositLabel; 

    //Send 
    NSMutableArray *sendArray; 
    IBOutlet UIPickerView *sendPicker; 
    IBOutlet UILabel *sendLabel; 
} 

@property (nonatomic, retain) NSMutableArray *depositArray; 
@property (nonatomic, retain) IBOutlet UIPickerView *depositPicker; 
@property (nonatomic, retain) NSMutableArray *sendArray; 
@property (nonatomic, retain) IBOutlet UIPickerView *sendPicker; 
@property (nonatomic, retain) IBOutlet UILabel *depositLabel; 
@property (nonatomic, retain) IBOutlet UILabel *sendLabel; 

@end 

Mise en œuvre:

#import "TransactionsViewController.h" 


@implementation TransactionsViewController 
@synthesize depositArray; 
@synthesize depositPicker; 
@synthesize sendArray; 
@synthesize sendPicker; 
@synthesize depositLabel; 
@synthesize sendLabel; 


} 



// Implement viewDidLoad to do additional setup after loading the view, typically from a nib. 
- (void)viewDidLoad { 
    [super viewDidLoad]; 


    NSMutableArray *dollarsArray = [[NSMutableArray alloc] init]; 
    for (int i = 5; i <= 100; i+=5) 
    { 
     NSString *item = [[NSString alloc] initWithFormat:@"%i", i]; 
     [dollarsArray addObject:item]; 

     [item release]; 
    } 

    self.depositArray = dollarsArray; 
    self.sendArray = dollarsArray; 

    [dollarsArray release]; 


} 

// Pickers 
#pragma mark - Pickers 
#pragma mark Pickers Data Source Methods 

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if(pickerView == depositPicker) { 
    switch(component) { 
     case 0: 
      return 1; 
      break; 
     case 1: 
      return [depositArray count]; 
      break; 
     default: 
      break; 
    } 
    } 
    else if(pickerView == sendPicker) { 
     switch(component) { 
      case 0: 
       return 1; 
       break; 
      case 1: 
       return [sendArray count]; 
       break; 
      default: 
       break; 
     } 
    } 
    return 0; 
} 

-(CGFloat)pickerView:(UIPickerView*)pickerView widthForComponent:(NSInteger)component { 
    switch (component) { 
     case 0: 
      return 50; 
      break; 
     case 1: 
      return 100; 
      break; 
     default: 
      break; 
    } 
    return 0; 
} 

#pragma mark Pickers Delegate Methods 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if(pickerView == depositPicker) { 
    switch(component) { 
     case 0: 
      return @"$"; 
      break; 
     case 1: 
      depositLabel.text=[depositArray objectAtIndex:row]; 
      return [depositArray objectAtIndex:row]; 
      [depositLabel release]; 
      break; 
     default: 
      break; 
    } 
    } 
    else if(pickerView == sendPicker) { 
     switch(component) { 
      case 0: 
       return @"$"; 
       break; 
      case 1: 
       return [sendArray objectAtIndex:row]; 
       break; 
      default: 
       break; 
     } 
    } 
    return 0; 
} 

//Pickers End 


- (void)didReceiveMemoryWarning { 
    // Releases the view if it doesn't have a superview. 
    [super didReceiveMemoryWarning]; 

    // Release any cached data, images, etc that aren't in use. 
} 

- (void)viewDidUnload { 
    // Release any retained subviews of the main view. 
    // e.g. self.myOutlet = nil; 

} 


- (void)dealloc { 
    [depositArray release]; 
    [send release]; 
    [super dealloc]; 

} 


@end 

Tout, comme le sendLabel, n'est pas encore mis en place. Comme vous pouvez le voir, le dépôtLabel se met automatiquement à jour avec la ligne sélectionnée, cependant, la valeur n'est pas mise à jour à la bonne valeur. Je ne sais pas si c'est ma mise en œuvre de l'étiquette ou le sélecteur lui-même qui est le problème.

J'apprécierais certaines entrées. Merci.

Répondre

1

La méthode titleForRow est juste là où vous êtes censé retourner le texte de la ligne. Dans votre titleForRow, cela n'a pas de sens d'y mettre le texte de l'étiquette (et je ne pense pas que vous devriez le publier). Le "return 0" à la fin de titleForRow peut également causer des problèmes.

Pour gérer une sélection réelle dans un sélecteur, utilisez la méthode didSelectRow.

+0

Merci beaucoup. Ça a marché. :) – intl