在选择器视图中显示上一个数组

Showing previous array in picker view

我是 IOS 的新手 我想在单击时在选择器视图中显示特定数组 textfield.I 创建了两个文本字段和两个带有一个选择器视图的数组。 我 运行 我的项目成功但是当我 select 在选择器视图中显示第一个文本字段第二个数组并且第二个文本字段在选择器视图中单击它的第二个数组时失败我不想在第一个文本字段中使用第二个数组。

选择器视图编码:

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;

}

选择器视图委托和文本字段:

-(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];
    }

}

你在哪里设置pktStatePicker.tag?默认情况下它设置为零,你每次都会看到第二个数组。加你代码

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField
{
if (textField == txtText )
{
    pktStatePicker.tag = 1;


}
else if (textField == currency1 )
{
    pktStatePicker.tag = 0;

}
  [pktStatePicker reloadAllComponents];
return YES;
}

并删除

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


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

}

   [pktStatePicker reloadAllComponents];

}

错了。我想它可能对你有帮助。我没有检查

像这样:

在 .m 文件的顶部声明一个简单的枚举来管理选择器状态:

typedef NS_ENUM(NSUIInteger, PickerState) {
   PickerStateFirst = 0, 
   PickerStateSecond
}

声明一个 PickerState 变量:

@property (nonatomic) PickerState pickerState;

当文本字段开始通过其标签进行编辑时设置选择器状态(在 IB 中设置):

-(BOOL) textFieldShouldBeginEditing:(UITextField *)textField {
  self.pickerState = textField.tag;
  [pktStatePicker reloadAllComponents];
   return YES;
} 

检查选择器委托中现在的状态:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component {
    if(self.pickerState == PickerStateFirst){
        return arrMsg.count;
    }
    return currencyname1.count;
}


- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
     if(self.pickerState == PickerStateFirst){
         return [arrMsg objectAtIndex:row];
     } 
     return [currencyname1 objectAtIndex:row]; 
}


- (void) pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
    if(self.pickerState == PickerStateFirst){
    txtText.text = (NSString *)[arrMsg objectAtIndex:row];
    }
    currency1.text = (NSString *)[currencyname1 objectAtIndex:row];
}