UIPickerView设置选定的行背景颜色

时间:2014-10-21 18:42:36

标签: ios objective-c xcode xcode6 uipickerview

我找到了这段代码here

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    UILabel *label = (UILabel*) view;
    if (label == nil)
    {
        label = [[UILabel alloc] init];
    }

    [label setText:@"Whatever"];

    // This part just colorizes everything, since you asked about that.

    [label setTextColor:[UIColor whiteColor]];
    [label setBackgroundColor:[UIColor blackColor]];
    CGSize rowSize = [pickerView rowSizeForComponent:component];
    CGRect labelRect = CGRectMake (0, 0, rowSize.width, rowSize.height);
    [label setFrame:labelRect];

    return label;
}

但是,正如评论中所述,它有一个问题:

  

它使标签着色,但不是拾取器本身。因此,当您滚动到一端或另一端时,会有一个空白点,您可以看到白色背景。

我只需要更改所选行的背景颜色。

2 个答案:

答案 0 :(得分:2)

我发现在iOS 14中,选择器的所选项目现在得到了灰色背景色。当前的要求是摆脱这种情况。 所以这似乎可行。

pickerView.subviews[safe:1]?.backgroundColor = UIColor.clear 

(“ safe”是一个运算符,它执行数组边界检查,如果索引无效,则返回nil)

我从这里得到了这个主意:https://stackoverflow.com/a/53740571/826946

答案 1 :(得分:0)

我们也可以通过继承 UIPickerView 并将 Andy 的答案放在 layoutSubviews 重写方法中来实现这一点。

class PickerView: UIPickerView {
   override func layoutSubviews() {
      super.layoutSubviews()
      subviews[safe:1]?.backgroundColor = UIColor.clear 
   }
}