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 回答