-1

私のnumberOfComponentsInPickerView:

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

私のnumberOfRowsInComponent:

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component
{
    if (component == 0)
        return 100;
    if (component == 1)
        return 100;
    if (component == 2)
        return 100;

    return 0;
}

このような私のtitleForRow:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component
{    
    if (component == 0)
        return [NSString stringWithFormat:@"%d", row];
    if (component == 1)
        return [NSString stringWithFormat:@"%d", row];
    if (component == 2)
        return [NSString stringWithFormat:@"%d", row];

    return 0;
}

Paras Joshiが言ったように編集した後、私のdidSelectRowはこのよう になりました:

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    int year = [picker selectedRowInComponent:0];
    int month = [picker selectedRowInComponent:1];
    int day = [picker selectedRowInComponent:2];
    if(viewPicker.tag == 1)
        labelDate1.text = [year stringByAppendingFormat:@" : %d : %d", month, day];
    else
        labelDate2.text = [year stringByAppendingFormat:@" : %d : %d", month, day];
}

それでもエラー「badreceivertype'int'」が表示されますが、修正方法がわかりません。私のラベルはどのようにtitleForRowからデータを取得しますか?

年月と日の両方の入力はすべて数値のみ(0から99)であるため、次のように記述しました-> return [NSString stringWithFormat:@ "%d"、row];

labelDate1またはlabelDate2がpickerviewからデータを取得したいので、pickerviewのデータを-(void)viewDidLoadに配置しません。上で書いたように、私のラベルがpickerviewからデータを取得する可能性はありますか?または、 -(void)viewDidLoadにデータを書き込む必要がありますか?

助けてくれて、私の質問を見てくれてありがとう。

4

3 に答える 3

0

UIPickerViewのデリゲートを設定しましたか?つまり、pickerView:didSelectRow:inComponentが呼び出されましたか?

于 2012-06-23T10:29:45.773 に答える
0

こんにちは@PiyoPiyoyour

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 

メソッドは完全に間違っています。NSIntegerをNSStringに割り当てています。そのため、エラーが発生します。ピッカービューの行にデータを配置し、ここからデータを選択するには、NSArrayを使用する必要があります。ここでは、小さなサンプルコードを作成します。

これはviewController.hファイルです...

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIPickerViewDelegate, UIPickerViewDataSource>
{
    UIPickerView *myPickerView;

    NSMutableArray *arrayYear;
    NSMutableArray *arrayMonth;
    NSMutableArray *arrayDay;

    UILabel *lblDay;
    UILabel *lblMonth;
    UILabel *lblYear;
}

@end

それぞれ日、月、年のデータを含む3つの配列と、データを表示するための3つのUILabelがあります。そして明らかに1つのピッカービュー。

次に、viewController.mの部分に移動します。

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

   // UIPickerView declaration by coding 
    myPickerView = [[UIPickerView alloc]initWithFrame:CGRectMake(0.0, 0.0, 320.0, 216.0)];
    myPickerView.delegate = self;
    myPickerView.showsSelectionIndicator = YES;
    [self.view addSubview:myPickerView];

    // add some day number to day array
    arrayDay = [[NSMutableArray alloc]init];
    for(int i=1;i<6;i++)
    {
        NSString *string = [NSString stringWithFormat:@"%d",i];
        [arrayDay addObject:string];
    }

    // add some month string to month array
    arrayMonth = [[NSMutableArray alloc]init];
    [arrayMonth addObject:@"June"];
    [arrayMonth addObject:@"July"];
    [arrayMonth addObject:@"August"];
    [arrayMonth addObject:@"September"];
    [arrayMonth addObject:@"October"];

    // add some year number to year array
    arrayYear = [[NSMutableArray alloc]init];
    for(int i=2006;i<2011;i++)
    {
        NSString *string = [NSString stringWithFormat:@"%d",i];
        [arrayYear addObject:string];
    }

     //set initially text to day label
     lblDay = [[UILabel alloc]initWithFrame:CGRectMake(10.0, 250.0, 90.0, 50.0)];
    [lblDay setText:[arrayDay objectAtIndex:0]];
    [self.view addSubview:lblDay];

    //set initially text to month label
    lblMonth = [[UILabel alloc]initWithFrame:CGRectMake(110.0, 250.0, 90.0, 50.0)];
    [lblMonth setText:[arrayMonth objectAtIndex:0]];
    [self.view addSubview:lblMonth];

    //set initially text to year label
    lblYear = [[UILabel alloc]initWithFrame:CGRectMake(210.0, 250.0, 90.0, 50.0)];
    [lblYear setText:[arrayYear objectAtIndex:0]];
    [self.view addSubview:lblYear];


    //set initially selection to each component of UIPickerView
    [myPickerView selectRow:1 inComponent:0 animated:NO];
    [myPickerView selectRow:1 inComponent:1 animated:NO];
    [myPickerView selectRow:1 inComponent:2 animated:NO];
}

//here you are returning the number of component, which are 3 in this case
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView;
{
    return 3;
}

//this is your didSelectRow method and here you are assigning a new text to 
//label accordingly to if condition
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{

    if(component == 0)
    {
        lblDay.text = [arrayDay objectAtIndex:row];
    }
    if(component == 1)
    {
        lblMonth.text = [arrayMonth objectAtIndex:row];
    }

    if(component == 2)
    {
        lblYear.text = [arrayYear objectAtIndex:row];
    }

}


 //this is your numberOf row in component in this case each component have 5 
 //rows thats why i wrote only return 5; here you can put if condition here for 
 //returning different rows for each component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component;
{
     return 5;
}


 // and this is showing title on rows
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component;
{
    if (component == 0)
    return [arrayDay objectAtIndex:row];
    else if (component == 1)
    return [arrayMonth objectAtIndex:row];
    else if (component == 2)
    return [arrayYear objectAtIndex:row];
    else
        return 0;
}

このチュートリアルがお役に立てば幸いです。ありがとうございました!

于 2012-06-23T11:40:50.800 に答える
0

プログラムでは、問題となる整数に文字列を追加しています。このコードが問題になります。year は整数だからです。

labelDate1.text = [year stringByAppendingFormat:@" : %d : %d", month, day];

このコードで確認してください。

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
    int year = [picker selectedRowInComponent:0];
    int month = [picker selectedRowInComponent:1];
    int day = [picker selectedRowInComponent:2];
    NSString *date = @"";
    if(viewPicker.tag == 1)
        labelDate1.text = [date stringByAppendingFormat:@" %d : %d : %d",year, month, day];
    else
        labelDate2.text = [date stringByAppendingFormat:@"%d : %d : %d", year, month, day];
}
于 2012-06-23T11:44:32.750 に答える