Как изменить цвет текста заголовка UIPickerView в зависимости от позиции - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу установить UIPickerView таким образом, чтобы заголовок выбранной строки (в центре) был синим, а две строки выше и ниже имеют цвет текста черный, а остальные - серый ..

так это будет выглядеть примерно так

enter image description here

есть ли способ сделать это по-быстрому?

1 Ответ

0 голосов
/ 20 ноября 2018

Да, это так.Ниже приведен пример для одного компонента.

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])
}

Возможно, он существует другим способом, но я думаю, что этого будет достаточно:]

// Обновление 1: НЕ РЕКОМЕНДУЕТСЯ

Выможет переопределить (hitTest: point: событие) и вернуть себя из него, а затем перезагрузить компоненты (touchesMoved: touch: событие).НО свиток и касания на подборщике работать не будут.Вам нужно будет сделать что-то еще: (

// Update2: результат: enter image description here

...