Question

I have 2 picker views on my story board, everything done separately. However for some reason my second viewer is exactly copying the first one.

#import <UIKit/UIKit.h>

@interface MaisOuiViewController : UIViewController <UITextFieldDelegate, UIPickerViewDataSource, UIPickerViewDelegate>

@property (strong, nonatomic) IBOutlet UIPickerView *from;
@property (strong, nonatomic) IBOutlet UIPickerView *to;

@property (strong, nonatomic) NSArray * fromlang;
@property (strong,nonatomic) NSArray * tolang;

@end

@synthesize from;
@synthesize to;
@synthesize fromlang = _fromlang;
@synthesize tolang= _tolang;



- (void)viewDidLoad
{


    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.inWord.delegate = self;

    //Load  NSArray fromlang
    _fromlang= [[NSArray alloc] initWithObjects:@"English",@"Spanish",@"German", nil];


    //Load  NSArray tolang
    _tolang= [[NSArray alloc] initWithObjects:@"Hindi",@"Chinese",@"Check", nil];

}




#pragma mark - UIPickerView Methods

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

- (NSInteger)numberOfComponentsInPickerView1:(UIPickerView *)pickerView1
{
    return 1;
}




- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _fromlang.count;
}

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




- (NSInteger)pickerView1:(UIPickerView *)pickerView1 numberOfRowsInComponent1:(NSInteger)component1
{
    return _tolang.count;
}

- (NSString *)pickerView1:(UIPickerView *)pickerView1 titleForRow:(NSInteger)row forComponent1:(NSInteger)component1
{
    return [_tolang objectAtIndex:row];
}


@end

Can somebody please point out where am I going wrong ?

Thanks

Was it helpful?

Solution

The UIPickerViews from and to looks same because the delegate and datasource methods are same. iOS will call only the methods which are mentioned below as per the apple iOS documents refers


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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    return _fromlang.count;
}

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

You can instead set tag for to and from and use the code mentioned below




- (void)viewDidLoad
{


    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    self.inWord.delegate = self;

    //Set tags to differentiate
    from.tag=1;
    to.tag=2;

    //Load  NSArray fromlang
    _fromlang= [[NSArray alloc] initWithObjects:@"English",@"Spanish",@"German", nil];

    //Load  NSArray tolang
    _tolang= [[NSArray alloc] initWithObjects:@"Hindi",@"Chinese",@"Check", nil];

}
-(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView
    {   
        if(pickerView.tag==1)
       {
        return 1;
       }
       else
       {
      return 1;
        }
    }

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

 if(pickerView.tag==1)
       {
         return _fromlang.count;
       }
       else
       {
         return _tolang.count;
       }
}

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

 if(pickerView.tag==1)
       {
         return [_fromlang objectAtIndex:row];
       }
       else
       {
         return [_tolang objectAtIndex:row];
       }
}

Hope this will help.

OTHER TIPS

If you have two buttons to show that then take one integer variable and set some value or take BOOL value to make the difference or set the tag of your picker then after based on your condition call your array in picker view.

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


NSString *titleString;
if (currentSelectedDropDown == 1) {
    AIFillAccountTypeParserModel *modal = [[AIFillAccountTypeParserModel alloc]init];
    if (isSearching) {
        modal = [filteredArray objectAtIndex:row];
    }else{
        modal = [accountTypesPickerArray objectAtIndex:row];
    }
    titleString = modal.accountType;
    accountTypeTxtField.text = titleString;
}
else if(currentSelectedDropDown == 2) {
    AIFillRatingParserModel *modal = [[AIFillRatingParserModel alloc]init];
    if (isSearching) {
        modal = [filteredArray objectAtIndex:row];
    }else{
        modal = [accountTypesPickerArray objectAtIndex:row];
    }
    titleString = modal.rating_Description;
    ratingTxtField.text = titleString;
}
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    if (currentSelectedDropDown == 1) {
      AIFillAccountTypeParserModel *modal = nil;

    if (isSearching) {
        modal = [filteredArray objectAtIndex:row];
    }
    else{
        modal = [accountTypesPickerArray objectAtIndex:row];
    }
    NSString *titleString = modal.accountType;
    accountTypeTxtField.text = titleString;
    accountTypeId = modal.accountId;

    NSUserDefaults *accountType = [NSUserDefaults standardUserDefaults];
    [accountType setObject:modal.accountId forKey:@"SavedaccountType"];
}
else if (currentSelectedDropDown == 2) {

    AIFillOwnershipParserModel *modal = nil;

    if (isSearching) {
        modal = [filteredArray objectAtIndex:row];
    }
    else{
        modal =[accountTypesPickerArray objectAtIndex:row];
    }

    NSString *titleString = modal.ownership;
    ownershipTypeTxtField.text = titleString;
    ownerShipId = modal.ownerShipID;
}
}

This is just a example to make you understand

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top