2

我的pickerview 有问题,单击文本字段会显示一个空的uipickerview。我有 3 个文本字段,通过单击每个文本字段,每个文本字段都会有不同的数组。这是代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    tbMode.inputView = pickerView;
    tbWalkDist.inputView = pickerView;
    tbRouteOpt.inputView = pickerView;
}
-(BOOL)textFieldShouldReturn:(UITextField *)textField {
    [textField resignFirstResponder];
    return YES;
}
-(void)textFieldDidBeginEditing:(UITextField*)textField;
{
    modeArray = [[NSMutableArray alloc] init];
    if(textField.tag==1){
        [modeArray addObject:@" A "];
        [modeArray addObject:@" B "];
        pickerView.hidden = NO;
    }
    else{
        if(textField.tag==2){
            [modeArray addObject:@" 300 "];
            [modeArray addObject:@" 400 "]; 
            [modeArray addObject:@" 500 "];
            pickerView.hidden = NO;
    }
        else{
            if(textField.tag==3){
                [modeArray addObject:@" cheapest "];
                [modeArray addObject:@" fastest "];
                pickerView.hidden = NO;
            }
            else{
                pickerView.hidden=YES;
            }
        }
    }    
}
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
    return 1;
}

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:    (NSInteger)component
{
    tbMode.text = [modeArray objectAtIndex:row];
}

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
    return [modeArray count];
}

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

请帮忙!我哪里做错了?是否有可能-(void)textFieldDidBeginEditing:(UITextField*)textField;不调用此方法?谢谢

编辑*我错过了这 3 行,它们是用于调用该方法的每个文本字段viewDidLoad

tbMode.delegate = self;
tbWalkDist.delegate = self;
tbRouteOpt.delegate = self;

但我仍然得到一个空的选择器视图。我如何将这些添加NSMutableArray到选择器视图中 *添加[pickerView reloadAllComponents];到选择器中将显示值:)

4

3 回答 3

2

我在这里看不到您在哪里初始化 pickerView ivar。我可以假设它是在 xib 中创建的吗?如果是这样,请确保您已连接 iBOutlet 并将其委托和数据源属性设置为“文件所有者”或视图控制器。

如果您在 init 方法中创建选择器,请发布该代码,以便我们查看这些属性是否设置正确。

您还必须将您的控制器设置为 uiTextField 的委托。

此外,如果它们没有在其他地方实现,您将缺少这些必需的协议:

-pickerView:rowHeightForComponent:

–pickerView:widthForComponent:

于 2012-07-30T02:56:24.467 回答
1

设置新数据集后尝试[pickerView reloadAllComponents]。

于 2012-07-30T03:00:38.210 回答
1

至于您的输出问题,您需要跟踪激活的 uiTextField 。添加一个ivar,

uiTextField *activeField;

在 textfield 委托方法中将变量设置为适当的 uiTextField 对象。然后更换,

tbMode.text = [modeArray objectAtIndex:row];

和,

activeField.txt = [modeArray objectAtIndex:row];

像这样设置 ivar:

    -(void)textFieldDidBeginEditing:(UITextField*)textField
{
      activeField = textField;

      // all the if else logic here

}
于 2012-07-30T03:14:41.850 回答