2013-10-07 14 views
98

Ich kenne die pickerView:viewForRow:forComponent:reusingView Methode, aber bei der Verwendung der view geht es in reusingView: wie kann ich es ändern, um eine andere Textfarbe zu verwenden? Wenn ich view.backgroundColor = [UIColor whiteColor]; benutze, wird keine der Ansichten mehr angezeigt.Wie ändere ich die Farbe des Textes in einem UIPickerView unter iOS 7?

+0

möglich Duplikat (http://stackoverflow.com/questions/18807940/can-i -change-the-font-Farbe-des-Datumsauswahl-in-ios7) –

+1

@AaronBrager. Nach dieser Anfrage wird kein Duplikat des von Ihnen bereitgestellten Links abgefragt. –

Antwort

273

Es gibt eine Funktion in der delegierte Methode, die mehr elegant ist:

Objective-C:

- (NSAttributedString *)pickerView:(UIPickerView *)pickerView attributedTitleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    NSString *title = @"sample title"; 
    NSAttributedString *attString = 
     [[NSAttributedString alloc] initWithString:title attributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}]; 

    return attString; 
} 

Wenn Wenn Sie auch die Farben der Auswahlleiste ändern möchten, musste ich 2 separate UIViews zu der Ansicht hinzufügen, die die 012 enthält, Abstand 35 Punkte auseinander für eine Picker Höhe von 180

Swift 3:

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { 

    let string = "myString" 
    return NSAttributedString(string: string, attributes: [NSForegroundColorAttributeName:UIColor.white]) 
} 

Swift 4:

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { 

    let string = "myString" 
    return NSAttributedString(string: string, attributes: [NSAttributedStringKey.foregroundColor: UIColor.white]) 
} 

Denken Sie daran, wenn Sie die Methode verwenden: Sie don 't muss titleForRowInComponent() implementieren, wie es nie aufgerufen wird, wenn attributedTitleForRow() verwendet wird.

+2

Erstaunlich !! Dies ist das beste und sollte die richtige Antwort sein. Vielen Dank. – user1949873

+0

Bei weitem ist dies die beste Antwort, da es auch für Auswahlansichten mit mehr als einer Komponente funktioniert. – PKCLsoft

+0

Gute Arbeit. Ich habe eine Bearbeitung für Leute hinzugefügt, die ein Array zu Ihrer Antwort verwenden. Wenn das ein Problem ist, lass es mich wissen. – Rick

27

original post [hier] (can I change the font color of the datePicker in iOS7?)

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 44)]; 
    label.backgroundColor = [UIColor grayColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18]; 
    label.text = [NSString stringWithFormat:@" %d", row+1]; 
    return label; 
} 

// number Of Components 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

// number Of Rows In Component 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: (NSInteger)component 
{ 
    return 6; 
} 
+0

Diese Lösung eignet sich für eine Auswahlansicht mit einer einzelnen Komponente. Wenn Sie mehr als 1 haben, überlappen sich die Beschriftungen von dem, was ich sehen kann. – PKCLsoft

2

Ich lief das gleiche Problem mit einem PickerView mit zwei Komponenten. Meine Lösung ist ähnlich wie oben mit ein paar Modifikationen. Da ich zwei Komponenten verwende, ist es notwendig, aus zwei verschiedenen Arrays zu ziehen.

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

    UILabel *label = [[UILabel alloc] init]; 
    label.backgroundColor = [UIColor blueColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18]; 

    //WithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 60)]; 

    if(component == 0) 
    { 
     label.text = [countryArray objectAtIndex:row]; 
    } 
    else 
    { 
     label.text = [cityArray objectAtIndex:row]; 
    } 
    return label; 
} 
18
1. Go to storyboard 
2. Select PickerView 
3. Go to Identity inspector (3rd tab) 
4. Add User Defined Runtime Attribute 
5. KeyPath = textColor 
6. Type = Color 
7. Value = [Color of you choice] 

screenshot

+0

Bitte erklären Sie Ihre Antwort – Gwenc37

+10

es ist Arbeit in einer Hälfte, cus Text ist schwarz, aber wenn Sie scrollen es auf Picker er Wechsel zu weiß – Shial

+0

Dies sollte als die richtige Antwort markiert sein! –

7

in Xamarin, überschreiben die UIPickerModelView Methode GetAttributedTitle

public override NSAttributedString GetAttributedTitle(UIPickerView picker, nint row, nint component) 
{ 
    // change text white 
    string title = GetTitle (picker, row, component); // get current text from UIPickerViewModel::GetTitle 
    NSAttributedString ns = new NSAttributedString (title, null, UIColor.White); // null = font, use current font 
    return ns; 
} 
1
- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view { 
     UILabel* pickerLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, pickerView.frame.size.width, 37)]; 
     pickerLabel.text = @"text"; 
     pickerLabel.textColor = [UIColor redColor]; 
     return pickerLabel; 
} 
0

Swift 4 (Update an die akzeptierte Antwort)

extension MyViewController: UIPickerViewDelegate{ 
    } 

    func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? { 
     return NSAttributedString(string: "your-title-goes-here", attributes: [NSAttributedStringKey.foregroundColor: UIColor.white]) 
    } 
} 
0

Dies funktioniert: [? Kann ich die Schriftfarbe des Datepicker in iOS7 ändern]

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row 
forComponent:(NSInteger)component reusingView:(UIView *)view 
{ 
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 
    pickerView.frame.size.width, 44)]; 
    label.backgroundColor = [UIColor grayColor]; 
    label.textColor = [UIColor whiteColor]; 
    label.font = [UIFont fontWithName:@"HelveticaNeue-Bold" size:18]; 
    label.text = [NSString stringWithFormat:@" %d", row+1]; 
    return label; 
} 

// total Components 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 1; 
} 

// total rows In Component 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent: 
(NSInteger)component 
{ 
    return 6; 
} 
+0

Sieht aus wie das Kopieren/Einfügen einer der Antworten ist. Wo ist der Unterschied? – Sunil

Verwandte Themen