0

配列に基づく 2 つのコンポーネントを持つ単純なカスタム ピッカー ビューをセットアップしようとしています。最初の配列 (コンポーネント 0 で使用) は次のように定義されます。

onesScore = [[NSMutableArray alloc]init];
[onesScore addObject:@"5"];
[onesScore addObject:@"6"];
[onesScore addObject:@"7"];
[onesScore addObject:@"8"];
[onesScore addObject:@"9"];

2 番目の配列 (コンポーネント 1 で使用) は次のように定義されます。

tenthsScore = [[NSMutableArray alloc]init];
[tenthsScore addObject:@"0"];
[tenthsScore addObject:@"1"];
[tenthsScore addObject:@"2"];
[tenthsScore addObject:@"3"];
[tenthsScore addObject:@"4"];
[tenthsScore addObject:@"5"];
[tenthsScore addObject:@"6"];
[tenthsScore addObject:@"7"];
[tenthsScore addObject:@"8"];
[tenthsScore addObject:@"9"];

次のコードを使用してカスタム ビューを作成しています。

 - (UIView *)pickerView:(UIPickerView *)picker viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
UILabel* retval = (id)view;
if (!retval){
    retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [picker rowSizeForComponent:component].width, [picker rowSizeForComponent:component].height)];

    if (component == 0)
    {
        retval.text = [onesScore objectAtIndex:row];
    }
    else if (component == 1)
    {
        retval.text = [tenthsScore objectAtIndex:row];
    }

retval.font = [UIFont fontWithName:@"Helvetica" size:48];
retval.backgroundColor =[UIColor clearColor];
retval.textAlignment = NSTextAlignmentCenter;
}
return retval;

}

ピッカーの UI はうまく機能し、最初のコンポーネントが正しく読み込まれます。問題は、2 番目のコンポーネントが取得されることです。

0、1、2、3、4、5、0、1、2、3

完全な「tenthsScore」配列を適切にロードしていません。私は完全に途方に暮れています。

何か案は?

4

1 に答える 1

1

今後は、コードを適切にフォーマットするように努力してください。そうすることで、私たちがあなたを助けやすくなります。

とにかく、text最初にラベルを作成するときにのみラベルを設定しています。ラベルを再利用する場合は、再利用したラベルを変更せずに返すだけです。

- (UIView *)pickerView:(UIPickerView *)picker viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UILabel* retval = (id)view;
    if (!retval){
        retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [picker rowSizeForComponent:component].width, [picker rowSizeForComponent:component].height)];
        retval.font = [UIFont fontWithName:@"Helvetica" size:48];
        retval.backgroundColor =[UIColor clearColor];
        retval.textAlignment = NSTextAlignmentCenter;
    }

    if (component == 0) {
        retval.text = [onesScore objectAtIndex:row];
    } else if (component == 1) {
        retval.text = [tenthsScore objectAtIndex:row];
    }

    return retval;
}
于 2013-08-07T16:47:10.317 に答える