Doug Smith Doug Smith - 2 months ago 27
iOS Question

How do I change the color of the text in a UIPickerView under iOS 7?

I'm aware of the

pickerView:viewForRow:forComponent:reusingView
method, but when using the
view
it passes in
reusingView:
how do I change it to use a different text color? If I use
view.backgroundColor = [UIColor whiteColor];
none of the views show up anymore.

Jon Jon
Answer

There is a function in the delegate method that is more elegant:

- (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;
}

If you want to change the selection bar colors as well, I found that I had to add 2 separate UIViews to the view containing the UIPickerView, spaced 35 pts apart for a picker height of 180.

Update for Swift 3:

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

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

Remember when you use the method: You don't need to implement titleForRowInComponent() as it is never called when using attributedTitleForRow().

Comments