如何根据位置更改UIPickerView标题文本的颜色

时间:2018-11-20 06:05:15

标签: swift colors uipickerview selected

我想设置一个UIPickerView,以使选中的行的标题(在中心)为蓝色,上下两行的文本为黑色,其他行为灰色。

所以它看起来像这样

enter image description here

有什么办法可以迅速做到吗?

2 个答案:

答案 0 :(得分:1)

是的。下面的示例是针对一个组件的。

var pickerArray = [String]()
var selectedRow: Int {
    return pickerView.selectedRow(inComponent: 0)
}

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    pickerView.reloadComponent(component)
}

func pickerView(_ pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
    var color = UIColor.gray

    if row == selectedRow {
        color = UIColor.blue
    } else if selectedRow == row - 1 || selectedRow == row + 1 {
        color = UIColor.black
    }

    return NSAttributedString(string: pickerArray[row], attributes: [NSAttributedString.Key.foregroundColor: color])
}

也许存在另一种方式,但是我认为这已经足够了:]

// Update1:​​不推荐

您可以覆盖(hitTest:point:event)并从中返回self,然后在(touchesMoved:touches:event)上重新加载组件。但是滚动和选择器上的触摸将不起作用。您将需要做其他事情:(

// Update2:结果: enter image description here

答案 1 :(得分:0)

@Deryck Lucian 更新答案

if(EMSCRIPTEN)