6

ここでいくつかのYouTubeチュートリアルとアドバイスに従いましたが、UIPickerViewにデータを表示できないようです。3 つの配列を使用してピッカーにデータを入力しています。コードを正しく実装したと思っていましたが、明らかに何かが間違っています。ピッカーは要素の数を正しく表示しますが、問題はそれらがすべて「?」として表示されることです。

ピッカーのデリゲートを自分自身に設定しようとしましたが、それもうまくいきませんでした。前もって感謝します。

ここに私の.hファイルがあります:

@interface BACcalcViewController : UIViewController<UIPickerViewDataSource, UIPickerViewDelegate>
@property(strong, nonatomic) IBOutlet UIPickerView *personInfoPicker;
@property(strong, nonatomic) NSArray *heightsArray;
@property(strong, nonatomic) NSArray *weightsArray;
@property(strong, nonatomic) NSArray *timeArray;
@end

ここに私の.mファイルがあります:

@interface BACcalcViewController () <UIPickerViewDataSource, UIPickerViewDelegate>

@end

@implementation BACcalcViewController


@synthesize personInfoPicker, heightsArray, weightsArray, timeArray;
- (void)viewDidLoad
{

[super viewDidLoad];

heightsArray = [NSArray arrayWithObjects:
                         @"5ft 0in",
                         @"5ft 1in",
                         @"5ft 2in",
                         @"5ft 3in",
                         @"5ft 4in",
                         @"5ft 5in",
                         @"5ft 6in",
                         @"5ft 7in",
                         @"5ft 8in",
                         @"5ft 9in",
                         @"5ft 10in",
                         @"5ft 11in",
                         @"6ft 1in",
                         @"6ft 2in",
                         @"6ft 3in",
                         @"6ft 4in",
                         @"6ft 5in",
                         @"6ft 6in",
                         @"6ft 7in",
                         @"6ft 8in",
                         nil];

weightsArray = [NSArray arrayWithObjects:
                     @"100",
                     @"110",
                     @"120",
                     @"130",
                     @"140",
                     @"150",
                     @"160",
                     @"170",
                     @"180",
                     @"190",
                     @"200",
                     @"210",
                     @"220",
                     @"230",
                     @"240",
                     @"250",
                     @"260",
                     nil];


timeArray = [NSArray arrayWithObjects:
             @"1",
             @"2",
             @"3",
             @"4",
             @"5",
             @"6",
             nil];
}



- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)personInfoPicker
{
    return 3;
}


- (NSInteger)pickerView:(UIPickerView *)personInfoPicker numberOfRowsInComponent: (NSInteger)component
{
    if (component == 0) 
        return [heightsArray count];
    else if (component == 1)
        return [weightsArray count];
    else
        return [timeArray count];
}

- (NSString *)pickerview:(UIPickerView *)personInfoPicker titleForRow:(NSInteger)row forComponent:(NSInteger)component
{    
    if (component == 0)
        return [heightsArray objectAtIndex:row];
    else if (component == 1)
        return [weightsArray objectAtIndex:row];
    else
        return [timeArray objectAtIndex:row];
}
@end
4

7 に答える 7

18

ピッカー ビューを設定し、配列を作成した後dataSourceに呼び出す必要があります。reloadAllComponents

self.personInfoPicker.delegate = self;
self.personInfoPicker.dataSource = self;
[self.personInfoPicker reloadAllComponents];
于 2013-03-11T07:32:57.627 に答える
2

init メソッドで 3 つの配列すべてを初期化してみてください。

于 2013-03-11T07:28:28.137 に答える
2

以下のコードを試してみてください。

`NSMutableArray *_month_ary=[[NSMutableArray alloc]initWithObjects:@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12", nil];
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
    return 1;
}

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


    if ([pickerView isEqual:_month_picker_view]) {
        return [_month_ary count];
    }
    return 0;
}
-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{


    if ([pickerView isEqual:_month_picker_view])
    {
        return [_month_ary objectAtIndex:row];
    }
    return nil;
}
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{


    if ([pickerView isEqual:_month_picker_view]) {
        _Pay_Month_txt.text=[_month_ary objectAtIndex:row];
        deal_cridit_card_month_str = [_month_ary objectAtIndex:row];
    }
}`
于 2013-03-12T13:03:15.177 に答える
1

私はあなたのコードが絶対に正しいと思います、そしてあなたも設定datasourcedelegateますが、あなたはリロードするのを忘れてuipickerviewいるので、最後にviewdidloadリロードpickerviewして問題を解決します

于 2013-03-11T08:58:20.220 に答える
1

最初のコードをコピーしたところ、バグが見つかりました。デリゲート メソッド名にタイプミスがあります

それ以外の

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

それは違いない

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

pickerview を記述すると、クラスで呼び出されることのない新しいメソッドが宣言されます。とてもシンプルですが、とにかく面倒です:-)

于 2013-04-23T20:09:54.520 に答える
1

あなたのコードは問題ありません。メソッドの「pickerView」名のオブジェクトを変更するだけです。

交換

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

に、

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

と、

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

に、

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

は既に .h ファイルで使用されてpersonInfoPickerいる のオブジェクトであるため、 のデータの読み込み中に競合します。PickerViewpickerView

うまくいけば、それはあなたを助けるでしょう.

ありがとう。

于 2013-03-11T08:28:38.857 に答える
0

ピッカーのデータソースとして使用される配列を割り当てていないと思います。

 NSMutableArray *_month_ary=[[NSMutableArray alloc]initWithObjects:@"01",@"02",@"03",@"04",@"05",@"06",@"07",@"08",@"09",@"10",@"11",@"12", nil];
于 2013-03-12T12:57:13.000 に答える