iOS学习-UIPickerView自定义选中行背景色

UIPickerView默认有一层灰色背景,并且系统不直接提供修改的方法,我们需要手动获取次到那个view图层,并对其进行更改。下面简单来阐述,在代理中实现

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

1、取到选中行背景的图层,修改颜色

获取到middleContainerView,并修改其颜色

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
    [self customSelectedRow];
    //设置文字的属性
    UILabel *bedTypeLabel = [UILabel new];
    bedTypeLabel.textAlignment = NSTextAlignmentCenter;

    bedTypeLabel.text = self.bedTypeArray[row];
    bedTypeLabel.font = [UIFont systemFontOfSize:20];
    bedTypeLabel.textColor = [UIColor blackColor];

    return bedTypeLabel;
}

//取到选中行背景的图层,修改颜色
- (void)customSelectedRow {
    NSArray *subviews = self.pickerVIew.subviews;
    if (!(subviews.count > 0)) {
           return;
       }
    NSArray *coloms = subviews.firstObject;
    if (coloms) {
        NSArray *subviewCache = [coloms valueForKey:@"subviewCache"];
        if (subviewCache.count > 0) {
            UIView *middleContainerView = [subviewCache.firstObject valueForKey:@"middleContainerView"];
            if (middleContainerView) {
                middleContainerView.backgroundColor = [UIColor whiteColor];
            }
        }
    }
}

2、去除默认的灰色背景

修改pickerView.subviews[1].backgroundColor的颜色,让灰色背景色消失

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view{
    [self customSelectedRow];
    //设置文字的属性
    UILabel *bedTypeLabel = [UILabel new];
    bedTypeLabel.textAlignment = NSTextAlignmentCenter;

    bedTypeLabel.text = self.bedTypeArray[row];
    bedTypeLabel.font = [UIFont systemFontOfSize:20];
    bedTypeLabel.textColor = [UIColor blackColor];
    if (self.subviews.count > 0) {
        pickerView.subviews[1].backgroundColor = [UIColor clearColor];// 去除原本的灰色背景
    }
    return bedTypeLabel;
}

你可能感兴趣的:(iOS,ios,学习,xcode)