Search code examples
iosuitextfielduipickerview

Showing previous array in picker view


I am new to IOS i want to show particular array in picker view while i click textfield.I created two text field and two array with one pickerview. i run my project success but fail when i select first textfield second array displaying in picker view and second textfield click its second array in picker view i don't want to second array in first textfield.

Picker view coding:

pktStatePicker = [[UIPickerView alloc] initWithFrame:CGRectZero];

    pktStatePicker  .delegate = self;

    pktStatePicker  .dataSource = self;

    [ pktStatePicker  setShowsSelectionIndicator:YES];

   txtText.inputView =  pktStatePicker  ;
    currency1.inputView = pktStatePicker;

    // Create done button in UIPickerView


    UIToolbar*  mypickerToolbar = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 56)];

    mypickerToolbar.barStyle = UIBarStyleBlackOpaque;

    [mypickerToolbar sizeToFit];


    NSMutableArray *barItems = [[NSMutableArray alloc] init];


    UIBarButtonItem *flexSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];

    [barItems addObject:flexSpace];


    UIBarButtonItem *doneBtn = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(pickerDoneClicked)];

    [barItems addObject:doneBtn];


    [mypickerToolbar setItems:barItems animated:YES];


    txtText.inputAccessoryView = mypickerToolbar;
    currency1.inputAccessoryView = mypickerToolbar;

}

Picker view delegates and textfield:

-(void)textFieldDidBeginEditing:(UITextField *)textField {
    if (textField == txtText )
    {
        pktStatePicker = arrMsg;
        [pktStatePicker reloadAllComponents];

    }
    else if (textField == currency1 )
    {
        pktStatePicker = currencyname1;
        [pktStatePicker reloadAllComponents];
    }

}
-(void)pickerDoneClicked

{
    NSLog(@"Done Clicked");


    [txtText resignFirstResponder];
    //[currency1 res];

}

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView

{

    return 1;

}


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

{
    if(pickerView.tag == 1){
        return arrMsg.count;
    }else{
    return currencyname1.count;
    }
}


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

{
    if(pickerView.tag==1){

        return [arrMsg objectAtIndex:row];
    }
    else{
            return [currencyname1 objectAtIndex:row];
    }

}


- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component

{
    if(pickerView.tag ==1){
    txtText.text = (NSString *)[arrMsg objectAtIndex:row];
    }else{
    currency1.text = (NSString *)[currencyname1 objectAtIndex:row];
    }

}

Solution

  • Where do you set pktStatePicker.tag? By defaults it sets to zero, and you see second array every time. Add to you code

    -(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
    {
    if (textField == txtText )
    {
        pktStatePicker.tag = 1;
    
    
    }
    else if (textField == currency1 )
    {
        pktStatePicker.tag = 0;
    
    }
      [pktStatePicker reloadAllComponents];
    return YES;
    }
    

    And delete

    -(void)textFieldDidBeginEditing:(UITextField *)textField {
    if (textField == txtText )
    {
        pktStatePicker = arrMsg;
    
    
    }
    else if (textField == currency1 )
    {
        pktStatePicker = currencyname1;
    
    }
    
       [pktStatePicker reloadAllComponents];
    

    }

    It's wrong. I think It may help you. I didn't check