【发布时间】:2018-11-20 06:05:15
【问题描述】:
【问题讨论】:
标签: swift colors uipickerview selected
【问题讨论】:
标签: swift colors uipickerview selected
是的,是的。下面的示例是针对一个组件的。
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:event) 并从中返回 self,然后在 (touchesMoved:touches:event) 上重新加载组件。但是选择器上的滚动和触摸将不起作用。您将需要做其他事情:(
【讨论】:
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { return pickerArray[row] }
@Deryck Lucian 更新答案:
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let pickerLabel = UILabel()
pickerLabel.textColor = (row == pickerView.selectedRow(inComponent: component)) ? UIColor.red : UIColor.green
pickerLabel.text = List[row]
pickerLabel.textAlignment = .center
return pickerLabel
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
pickerView.reloadComponent(component)
}
【讨论】: