【问题标题】:Change selected row label color in picker view swift 1.2在选择器视图 swift 1.2 中更改选定的行标签颜色
【发布时间】:2015-11-15 19:40:13
【问题描述】:

我用以下代码创建了pickerview

    @IBOutlet var myPicker: UIPickerView!

    var colors: [String] = ["red","green","blue"]

    override func viewDidLoad() {
            super.viewDidLoad()     

            myPicker = UIPickerView()
            myPicker.dataSource = self
            myPicker.delegate = self
    }

    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
            return 1
        }

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return colors.count
        }

    func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
            return colors[row] as! String
        }

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

        }

现在我想更改所选行的标签(文本)颜色,例如,如果我向下滚动并选择蓝色,则文本颜色应更改为橙色,其他 2 个标签将为黑色,当我选择时也是如此其他行。我已经尝试了以下代码,但它不起作用

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView {
        var pickerLabel = UILabel()
        var myTitle:NSAttributedString
        let titleData = colors[row]
        if pickerView.selectedRowInComponent(component) == row {
            myTitle = NSAttributedString(string: titleData, attributes: [NSForegroundColorAttributeName: UIColor.redColor()])
        } else {
            myTitle = NSAttributedString(string: titleData, attributes: [NSForegroundColorAttributeName: UIColor.blueColor()])
        }

        //This way you can set text for your label.
        pickerLabel.attributedText = myTitle

        return pickerLabel

    }

我不知道是否应该使用 didSelectRow 或 viewForRow 方法来实现它,有人可以帮我解决这个问题吗?

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    您可以执行以下操作:

    class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
    
      var colors = ["red","green","blue"]
    
      func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
        return 1
      }
    
      func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return colors.count
      }
    
      func pickerView(pickerView: UIPickerView, attributedTitleForRow row: Int, forComponent component: Int) -> NSAttributedString? {
        let color = (row == pickerView.selectedRowInComponent(component)) ? UIColor.orangeColor() : UIColor.blackColor()
        return NSAttributedString(string: colors[row], attributes: [NSForegroundColorAttributeName: color])
      }
    
      func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        pickerView.reloadAllComponents()
      }
    }
    

    【讨论】:

    • 你太棒了!奇迹般有效!非常感谢@André Slotta :)
    猜你喜欢
    • 1970-01-01
    • 2021-09-06
    • 2021-01-21
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多