Doug Smith Doug Smith - 6 months ago 70
iOS Question

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

I'm aware of the

method, but when using the
it passes in
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

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().