Swift 如何根据位置更改UIPickerView标题文本颜色
我想设置一个UIPickerView,以便选中行(中间)的标题为蓝色,上面和下面两行的文本颜色为黑色,其他行的文本颜色为灰色 所以它看起来像这样Swift 如何根据位置更改UIPickerView标题文本颜色,swift,colors,uipickerview,selected,Swift,Colors,Uipickerview,Selected,我想设置一个UIPickerView,以便选中行(中间)的标题为蓝色,上面和下面两行的文本颜色为黑色,其他行的文本颜色为灰色 所以它看起来像这样 在swift中有什么方法可以做到这一点吗?是的,有。下面是一个组件的示例 var pickerArray = [String]() var selectedRow: Int { return pickerView.selectedRow(inComponent: 0) } func pickerView(_ pickerView: UIPi
在swift中有什么方法可以做到这一点吗?是的,有。下面是一个组件的示例
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)上重新加载组件。但是卷轴和拾取器上的触摸将不起作用。您将需要执行其他操作:(
//更新2:结果:
是的。下面是一个组件的示例
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,然后在(touchsmoved:touchs:event)上重新加载组件。但选择器上的滚动和触摸将不起作用。您需要执行其他操作:(
//更新2:结果:
@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)
}
@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)
}
我想要的是在滚动时改变颜色,但我想这在我们使用UIPickerView提供的APi中是不可能的。但是感谢您的回复!查看我的更新。也许您会比我的工作更幸运:]顺便问一下,我的NSAttributed String的字体部分不工作,您知道为什么吗?嗯,奇怪。我添加了一个s您使用的结果提示:
func pickerView(pickerView:UIPickerView,titleForRow行:Int,forComponent组件:Int)->字符串?{return pickerArray[row]}
我想要的是在滚动时改变颜色,但我想这对于我们使用UIPickerView提供的APi来说是不可能的。但是感谢您的回复!查看我的更新。也许您会比我的工作更幸运:]顺便问一句,我的NSAttributed String的字体部分不起作用了。您知道为什么吗?嗯,奇怪。我有广告您使用的结果的屏幕截图:func pickerView(\upickerview:UIPickerView,titleForRow行:Int,forComponent组件:Int)->String?{return pickerArray[row]}