3

これは以前に尋ねたので申し訳ありませんが、頭を抱え込むことができません。

私はすべて正常に動作する UIPickerView を持っており、それを UIViewController に追加します

    _pv = [[CategoryPicker alloc] init];
    _textField.inputView = _pv;

_pv は UIPickerView で、 _textField は結果を表示する textField です。

したがって、このコード行を使用すると、次のようになります。

_pv.categoryPicker.delegate = self; //set in my viewDidLoad

そして、これは UIViewController に配置されます。

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component {
// Handle the selection

_textField.text = [_pv.categoryArray objectAtIndex:row];

}   

TextField に入力することはできますが、UIPickerView には「?」が入力されています。配列のすべてのエントリに対して。

今私がこれを行うとき:

_pv.categoryPicker.delegate = _pv.self; //set in my viewDidLoad

これをUIPickerViewに入れました:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component {
// Handle the selection

_outputArray = [_categoryArray objectAtIndex:row];
NSLog(@"The item selected = %@", _outputArray);


 }

UIPickerView にはデータが取り込まれますが、データは TextField に渡されません。

これが私が立ち往生している場所です-両方の場所で結果を得る必要があります。今、私はサブクラス化でそれを行うと思っていましたが、読んだことはすべてうまくいきません。

私を助けてください:-)

よろしくお願いします。

4

3 に答える 3

2

UIPickerViewDelegateプロトコルの完全なドキュメントを確認してください。

基本的に、やりたいことは、UIViewController を UIPickerView のデリゲートとして次のように設定することです。

_pv.categoryPicker.delegate = self;

次に、UIViewController で、次の UIPickerViewDelegate メソッドを実装します。

- (void)pickerView:(UIPickerView *)pickerView didSelectRow: (NSInteger)row inComponent:(NSInteger)component {
    // called when a row is selected
    _textField.text = [_pv.categoryArray objectAtIndex:row];
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
    // here is where you populate the contents of the pickerView
    // return the title that you want to appear in 'row'
     return [NSString stringWithFormat:@"row %d", row];
}
于 2012-06-28T23:12:06.620 に答える
1

ごく最近、似たようなものを実装しました。配列から値をロードする UIPickerView があり、UIPicker 内の行が選択されると、UITableView 内のセル内の値が更新されます。ただし、テキスト フィールド内の値も簡単に更新できます。

ヘッダー ファイル内:

ヘッダー ファイルに、次を追加します。

// You will not need to set the view as the delegate again.

@interface yourClass: UIViewController <UIPickerViewDelegate, UIPickerViewDataSource>
{
    UIPickerView *_pv;
    UITextField *_textField;
}

@property (nonatomic, retain) IBOutlet UIPickerView *_pv;

実装内:

@synthesize _pv;

    #pragma mark -
    #pragma mark View Lifecycle

    - (void)viewDidLoad
    {
        [super viewDidLoad];
        // Initialize the array
        _categoryArray = [[NSArray alloc] initWithObjects:
                        @"1", @"2", @"3",
                        @"4", @"5", nil];

        // Initialize text field of type UITextField and set its input type as picker viewer
        _textField.inputView = pickerViewer; 
     }

#pragma mark -
#pragma mark PickerView DataSource

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
   // The array with all the values that you want to see inside the picker viewer
   return [_categoryArray count]; 
}

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{
   // Value inside the picker viewer will be loaded for the output array
   return [_categoryArray objectAtIndex:row];
} 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    // When a value is selected in picker viewer, take its value and assign it to the text view
    //NSLog(@"Picker view row selected");
    _textField.text = [NSString stringWithFormat:@"%@", [_categoryArray objectAtIndex:row]]; 
}

また、ピッカー ビューアを IB のビューにドラッグし、IBOutlet であるため、ファイル オーナー内の _pv に接続します。

それが役に立てば幸い。私は UITablewViewController 内に実装し、同じビュー内に複数の UIPickerViewer を持っていました。だから私はいくつかのコードを編集しました.何かを見逃して動作しない場合はお知らせください.

于 2012-06-29T02:24:15.560 に答える
0

あなたの質問を正しく理解したかどうかはわかりませんが、入力するには、次のようにUIPickerViewする必要があります。

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{  
    return [_categoryArray objectAtIndex:row];   
}
于 2012-06-28T21:42:16.753 に答える