2008-11-22 12 views
8

Kann jemand die Farbe einer Zeile (oder Zeilenhintergrund) im UIPickerView-Steuerelement vom iPhone SDK ändern? Ähnlich wie bei der unter Titel für die Reihe, aber ich würde auch die Farbe der Zeile ändern mögen:UIPickerView-Zeilenfarbe

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component; 

Danke.

Antwort

10

Sie können eine beliebige Ansicht in der -pickerView des Delegaten zurückgeben: viewForRow: forComponent: reusingView: Methode, dokumentiert here.

14

Dank Noah, das ist genau das, was ich brauchte. Ich wollte hier den Code für den Fall, jemand andere Bedürfnisse hinzuzufügen (oder will auf :)

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 

    CGRect imageFrame = CGRectMake(0.0, 0.0, 15, 15); 
    UIImageView *label = [[[UIImageView alloc] initWithFrame:imageFrame] **autorelease**]; 

    if (row == 0) 
    { 
     label.backgroundColor = [UIColor redColor]; 
    } 
    if (row == 1) 
    { 
     label.backgroundColor = [UIColor blueColor]; 
    } 
    if (row == 2) 
    { 
     label.backgroundColor = [UIColor blackColor]; 
    } 
    return label; 
} 
+1

Sollten Sie den 'reusingView' Parameter nicht verwenden? Es ähnelt dem UITableView-Pool für die Wiederverwendung ... –

+0

Gibt es eine Möglichkeit, die Auswahlleiste anzupassen, die in einem UIPickerView als grauer Farbverlauf angezeigt wird? –

-7

Kommentar Tun Sie dies:

label.backgroundColor = [UIColor yourcolorColor]; 
3

I implementiert dem folgende anhand von Sean Antwort:

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    CGRect rowFrame = CGRectMake(00.0f, 0.0f, [pickerView viewForRow:row forComponent:component].frame.size.width, [pickerView viewForRow:row forComponent:component].frame.size.height); 
    UILabel *label = [[UILabel alloc] initWithFrame:rowFrame]; 
    label.font = [UIFont boldSystemFontOfSize:18.0f]; 

    // This is an array I pass to the picker in prepareForSegue:sender: 
    label.text = [self.values objectAtIndex:row]; 
    label.textAlignment = UITextAlignmentCenter; 

    // This is an array I pass to the picker in prepareForSegue:sender: 
    if ([self.backgroundColors count]) { 
     label.backgroundColor = [self.backgroundColors objectAtIndex:row]; 

     // self.lightColors is an array I instantiate in viewDidLoad: self.lightColors = @[ [UIColor yellowColor], [UIColor greenColor], [UIColor whiteColor] ]; 
     label.textColor = [self.lightColors containsObject:label.backgroundColor] ? [UIColor blackColor] : [UIColor whiteColor]; 
    } else { 
     label.textColor = [UIColor blackColor]; 
    } 

    return label; 
} 
0
-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ 

    UILabel *labelSelected = (UILabel*)[pickerView viewForRow:row forComponent:component]; 
    [labelSelected setTextColor:[UIColor redColor]]; 

} 

Und

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{ 

    UILabel *label = (id)view; 

    if (!label){ 

     label=[[UILabel alloc]init]; 
     label.textAlignment = NSTextAlignmentCenter; 
     pickerView.backgroundColor=[UIColor whiteColor]; 
     label.text=[self pickerView:pickerView titleForRow:row forComponent:component]; 
     label.textColor=[UIColor grayColor]; 

    } 
    return label; 
}