2

次の問題があります。uipicker内の行のテキストの色を変更できますが、必要な特定の行のテキストの色を変更できません。ピッカーがすべて混乱し、多くのテキストラベルが青色になります。

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

        if ([retval.text isEqualToString:@"Seguros de saúde"]) {

            NSLog(@"ROW=%d",row);
            [retval setTextColor:[UIColor blueColor]];
        }
        if ([retval.text isEqualToString:@"Sistemas de Saúde e Equiparados"]) {
           NSLog(@"ROW=%d",row);
       [retval setTextColor:[UIColor blueColor]];

         if ([retval.text isEqualToString:@"Seguradoras-Acidentes de Trabalho, viação/pessoais e vida"]) {
            NSLog(@"ROW=%d",row);
            [retval setTextColor:[UIColor blueColor]];
         }
       if ([retval.text isEqualToString:@"Empresas, associações e outras entidades"]) {
            NSLog(@"ROW=%d",row);

            [retval setTextColor:[UIColor blueColor]];

       }


        [retval setBackgroundColor:[UIColor clearColor]];
        retval.font = [UIFont systemFontOfSize:14];

       }

    } else if(pickerView == horarioPicker) {
        retval.text =[arrayHorarios objectAtIndex:row];
        [retval setBackgroundColor:[UIColor clearColor]];
        retval.font = [UIFont systemFontOfSize:14];

    } else if(pickerView == examesPicker) {
        retval.text =[arrayExames objectAtIndex:row];
        [retval setBackgroundColor:[UIColor clearColor]];
        retval.font = [UIFont systemFontOfSize:14];

    } else if(pickerView == consultasPicker) {
        retval.text =[arrayConsultas objectAtIndex:row];
        [retval setBackgroundColor:[UIColor clearColor]];
        retval.font = [UIFont systemFontOfSize:14];

    }else {
        assert(NO);
    }
  return retval;
}

英語が下手でごめんなさい。事前に感謝の気持ちを込めて、質問を明確にしたいと思います。

4

2 に答える 2

3

問題は、各行のビューを再利用していて、UILabel の色が青であってはならないときに黒に戻していないことです。

このコードを追加...

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view {
    UILabel *retval = (UILabel*)view;
    if (!retval) {
        retval= [[UILabel alloc] initWithFrame:CGRectMake(0.0f, 0.0f, [pickerView rowSizeForComponent:component].width, [pickerView rowSizeForComponent:component].height)];
    }
    [retval setTextColor:[UIColor blackColor]];
    retval.text = [arraySubSistemasDeSaude objectAtIndex:row];
    ......

これにより、再利用されたビューをプルアップするたびに、最初に色が黒に設定されます。次に、コードは必要なものを青色でチェックし、それらを青色に設定します。あなたが行っていた方法では、それらのいくつかに青色を設定していました。その後、それらを再利用するときに、黒色にリセットすることはありませんでした.

于 2012-08-03T14:37:32.550 に答える
1
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row       forComponent:(NSInteger)component  reusingView:(UIView *)view {

  UILabel *pickerLabel = (UILabel *)view;

  if (pickerLabel == nil) {

        CGRect frame = CGRectMake(0.0, 0.0, 80, 32);
        pickerLabel = [[[UILabel alloc] initWithFrame:frame] autorelease];
        [pickerLabel setTextAlignment:UITextAlignmentLeft];
        [pickerLabel setBackgroundColor:[UIColor clearColor]];
        [pickerLabel setFont:[UIFont boldSystemFontOfSize:15]];
        [pickerLabel setTextColor:[UIColor blackColor]];
        [pickerLabel setText:@"MyTest"];

   }



   return pickerLabel;

}
于 2012-08-03T14:34:18.543 に答える