如何修改UIPickerView选中行背景颜色

最近有需求要求选择器,选中行背景颜色为蓝色,同时选中行字体颜色为白色。
如下图:

这里写图片描述

当时用的是系统原生UIPickerView实现的。但是UIPickerView并没有提供可以设置选中行背景颜色的接口。

后来通过查看UIPickerView的层级结构,发现 UIPickerView 内部有一个middleContainerView属性,这层view刚好覆盖的是选中行。如下图

这里写图片描述

可以看到,内部分层大致如下:选中行是一个view,选中行上部和下部也是单独的view。实现思路就考虑拿到中间行view,设置背景颜色。
在UIPickerView初始化后,设置一下此view背景颜色即可。那么问题就是如何拿到这层view。见下图:
这里写图片描述

middleContainerView就是我们要设置背景颜色的view。
实现代码:

    NSArray *subviews = self.pickView.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 = [MTColorUtil hexStringToColor:@"#3AABCB"];
            }
        }
    }

代码中是从subviewCache中取的,也可以从图片中的tables中获取是一样的。

Demo 地址:[https://github.com/moon13sun/UIPickerViewDemo.git]

1)Demo中中已经封装成ZGPickerView类,继承自UIPickerView。
2)数据源支持一维数组和二维数组。
3)选中数据索引通过delegate,回调给用户

猜你喜欢

转载自blog.csdn.net/setoge/article/details/78723298