2

ピッカービューに問題があり、テキストフィールドをクリックすると空の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];
}

plsヘルプ!どこが間違っていたのですか?このメソッド-(void)textFieldDidBeginEditing:(UITextField*)textField;が呼び出されない可能性はありますか?ありがとう

編集*私はそのメソッドを呼び出すために使用する各テキストフィールド用のこれらの3行を見逃していますviewDidLoad

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

しかし、まだ空のピッカービューが表示されます。これらをピッカービューに追加するにはどうすればよいですかNSMutableArray*ピッカーに追加する[pickerView reloadAllComponents];と値が表示されます:)

4

3 に答える 3

2

ここでは、pickerViewivarを初期化する場所がわかりません。xibで作成されていると思いますか?その場合は、iBOutletに接続し、そのデリゲートとデータソースのプロパティを「ファイル所有者」またはビューコントローラとして設定していることを確認してください。

initメソッドでピッカーを作成する場合は、そのコードを投稿して、これらのプロパティが正しく設定されているかどうかを確認します。

また、コントローラーをuiTextFieldのデリゲートとして設定しておく必要があります。

さらに、それらが他の場所に実装されていない場合、これらの必要なプロトコルが欠落しています。

– pickerView:rowHeightForComponent:

– pickerView:widthForComponent:

于 2012-07-30T02:56:24.467 に答える
1

新しいデータセットを設定した後、[pickerViewreloadAllComponents]を試してください。

于 2012-07-30T03:00:38.210 に答える
1

出力の問題については、アクティブ化されたuiTextFieldを追跡する必要があります。ivarを追加し、

uiTextField * activeField;

テキストフィールドデリゲートメソッドで変数を適切な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 に答える