2010-05-28 7 views
0

j'ai un pickerView avec 2 composants, quand je choisis par exemple la ligne 1 dans le composant 1, il chargera une liste de tableau dans le composant 2. et si je choisis la rangée 2 dans le composant 1 va charger une autre liste de tableau dans le composant 2. C'est possible?obj-c: iphone programmation picklead titleforrow méthode question

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView { 


return 2; 



} 





- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

if (component == 0){ 
    return [arraylist1 count]; 
if (component == 1) { 
    if ([pickerViewcustom selectedRowInComponent:0] == 0) { 
    return [arraylist3 count]; 
    } 
} 
} 




return 0; 

} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 




if (component == 0){ 
    return [arraylist1 objectAtIndex:row]; 
    if (component == 1) { 
    if ([pickerViewcustom selectedRowInComponent:0] == 0) { 
    return [arraylist3 objectAtIndex:row]; 
    } 
    } 

} 

return 0; 

} 




- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component { 



    return 150; 
} 
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 




[pickerViewcustom reloadComponent:0]; 
[pickerViewcustom reloadComponent:1]; 













} 

Répondre

3

Essayez quelque chose comme ceci:

#import <UIKit/UIKit.h> 

#define kStateComponent 0 
#define kZipComponent 1 

@interface DependentComponentPickerViewController : UIViewController <UIPickerViewDelegate, UIPickerViewDataSource> { 
    IBOutlet UIPickerView *picker; 
    NSDictionary *stateZips; 
    NSArray *states; 
    NSArray *zips; 
} 
@property (retain, nonatomic) UIPickerView *picker; 
@property (retain, nonatomic) NSDictionary *stateZips; 
@property (retain, nonatomic) NSArray *states; 
@property (retain, nonatomic) NSArray *zips; 
- (IBAction)butonPressed:(id)sender; 
@end 

#import "DependentComponentPickerViewController.h" 

@implementation DependentComponentPickerViewController 
@synthesize picker; 
@synthesize stateZips; 
@synthesize states; 
@synthesize zips; 

- (IBAction)butonPressed:(id)sender 
{ 
    NSInteger stateRow = [picker selectedRowInComponent:kStateComponent]; 
    NSInteger zipRow = [picker selectedRowInComponent:kZipComponent]; 

    NSString *state = [self.states objectAtIndex:stateRow]; 
    NSString *zip = [self.zips objectAtIndex:zipRow]; 

    NSString *title = [[NSString alloc] initWithFormat:@"You selected zip code %@.", zip]; 
    NSString *message = [[NSString alloc] initWithFormat:@"%@ is in %@", zip, state]; 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:title message:message delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
    [alert show]; 
    [alert release]; 
    [title release]; 
    [message release]; 
} 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { 
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) { 
     // Initialization code 
    } 
    return self; 
} 

- (void)viewDidLoad { 

    NSBundle *bundle = [NSBundle mainBundle]; 
    NSString *plistPath = [bundle pathForResource:@"statedictionary" ofType:@"plist"]; 
    NSDictionary *dictionary = [[NSDictionary alloc] initWithContentsOfFile:plistPath]; 
    self.stateZips = dictionary; 
    [dictionary release]; 

    NSArray *components = [self.stateZips allKeys]; 
    NSArray *sorted = [components sortedArrayUsingSelector:@selector(compare:)]; 
    self.states = sorted; 

    NSString *selectedState = [self.states objectAtIndex:0]; 
    NSArray *array = [stateZips objectForKey:selectedState]; 
    self.zips = array; 
} 

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { 
    // Return YES for supported orientations 
    return (interfaceOrientation == UIInterfaceOrientationPortrait); 
} 

- (void)didReceiveMemoryWarning { 
    [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview 
    // Release anything that's not essential, such as cached data 
} 

- (void)dealloc { 
    [picker release]; 
    [stateZips release]; 
    [states release]; 
    [zips release]; 
    [super dealloc]; 
} 

#pragma mark - 
#pragma mark Picker Data Source Methods 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if (component == kStateComponent) 
     return [self.states count]; 
    return [self.zips count]; 
} 

#pragma mark Picker Delegate Methods 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if (component == kStateComponent) 
     return [self.states objectAtIndex:row]; 
    return [self.zips objectAtIndex:row]; 
} 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if (component == kStateComponent) 
    { 
     NSString *selectedState = [self.states objectAtIndex:row]; 
     NSArray *array = [stateZips objectForKey:selectedState]; 
     self.zips = array; 
     [picker selectRow:0 inComponent:kZipComponent animated:YES]; 
     [picker reloadComponent:kZipComponent]; 
    } 
} 

- (CGFloat)pickerView:(UIPickerView *)pickerView widthForComponent:(NSInteger)component 
{ 
    if (component == kZipComponent) 
     return 90; 
    return 205; 
} 
@end 

Dans cet exemple, un NSDictionary a été utilisé, mais vous pouvez utiliser simplement des tableaux aussi.

Vous êtes les bienvenus

Arildo