在picker view swift中更改选定的行标签颜色1.2

我用下面的代码创build了一个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) { } 

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

 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方法来实现它,有人可以帮助我吗?

你可以做如下的事情:

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