2012-08-03 110 views
2

我有以下問題:我可以更改uipicker內的行的文本顏色,但不是我想要的特定行的文本顏色,選擇器會變得很困惑,並且很多文本標籤變爲藍色。更改特定的行顏色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; 
} 

對不起,我的英語不好,我希望我提出了自己清楚的問題,在此先感謝。

回答

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]; 
    ...... 

有了這個,每次拉重用視圖時,會先設置顏色爲黑色。然後代碼將檢查你想要的是藍色的,並將它們設置爲藍色。你做這件事的方式是,在它們中的一些上設置藍色,然後當你重複使用它們時,你永遠不會將它重置爲黑色。

+0

謝謝賈斯汀,完美的工作:) – 2012-08-03 15:14:32

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; 

}