Wie ändere ich die Farbe des Textes in einer UIPickerView unter iOS 7?

117

Ich bin die bewusst pickerView:viewForRow:forComponent:reusingViewMethode, aber wenn die Verwendung viewes geht in reusingView:wie ändere ich es eine andere Textfarbe zu benutzen? Wenn ich benutze, wird view.backgroundColor = [UIColor whiteColor];keine der Ansichten mehr angezeigt.

Doug Smith
quelle
2
@ AaronBrager. Que Nach dieser Que wird kein Duplikat des von u bereitgestellten Links abgefragt.
Gajendra K Chauhan

Antworten:

323

In der Delegate-Methode gibt es eine elegantere Funktion:

Ziel 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 Sie auch die Farben der Auswahlleiste ändern möchten, musste ich UIViewsder Ansicht, die UIPickerViewdie 35 Punkte voneinander entfernt enthält , 2 separate hinzufügen , um eine Auswahlhöhe von 180 zu erreichen.

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])
}

Swift 4.2:

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

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

Denken Sie daran, wenn Sie die Methode verwenden: Sie müssen sie nicht implementieren, titleForRowInComponent()da sie bei der Verwendung nie aufgerufen wird attributedTitleForRow().

Jon
quelle
Dies ist bei weitem die beste Antwort, da sie auch für Auswahlansichten mit mehr als einer Komponente funktioniert.
PKCLsoft
29

Originaler Beitrag hier: 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;
}

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

// number Of Rows In Component
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:   (NSInteger)component
{
    return 6;
}
Bordz
quelle
Diese Lösung funktioniert gut für ein Pickerview, das eine einzelne Komponente enthält. Wenn Sie mehr als 1 haben, überlappen sich die Beschriftungen von dem, was ich sehen kann.
PKCLsoft
23
  1. Gehe zum Storyboard
  2. Wählen Sie PickerView
  3. Gehen Sie zum Identitätsinspektor (3. Registerkarte).
  4. Benutzerdefiniertes Laufzeitattribut hinzufügen
  5. KeyPath = textColor
  6. Typ = Farbe
  7. Wert = [Farbe Ihrer Wahl]

Bildschirmfoto

Lancewise
quelle
Bitte erklären Sie Ihre Antwort
Gwenc37
11
Es ist Arbeit in einer Hälfte, Cus-Text ist schwarz, aber wenn Sie es auf Picker scrollen, wechselt er zu Weiß
Shial
4
Funktioniert nur, wenn Sie scrollen
Chris Van Buskirk
Hi @ chris-van-buskirk Überprüfen Sie mein Add-On [_thePrettyPicker selectRow: prettyIndex inComponent: 0 animiert: YES];
WINSergey
7

Überschreiben Sie in Xamarin 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;
}
Matt
quelle
5

Für mich geht das

pickerView.setValue(UIColor.yellow, forKeyPath: "textColor")
logeshpalani98
quelle
hat mir auch geholfen ..
Ripa Saha
2

Ich bin mit einem pickerView mit zwei Komponenten auf dasselbe Problem gestoßen . Meine Lösung ist ähnlich wie oben mit ein paar Modifikationen. Da ich zwei Komponenten verwende, muss aus zwei verschiedenen Arrays gezogen werden.

- (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;
}
R Thomas
quelle
2

Swift 4 (Update auf 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])
    }
}
hart_v
quelle
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;
}
Bobby
quelle