2015-05-12 4 views
0

Ниже код изменит цвет фона UIPickerView на голубой, показывая, что он является допустимым выбором, когда общий индексов строк = 6. Хотелось бы иметь заголовок pickerLabel в представлении (выбранный), чтобы включить синим цветом во всех четырех компонентах, когда выбор действителен. Есть идеи?Как изменить цвет фона текста с учетом UIPickerView с несколькими компонентами при действительном выборе в Swift

import UIKit 

class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

    @IBOutlet weak var myPicker: UIPickerView! 
    let pickerData0 = ["0R","1R","2R","3R","4R","5R","6R"] 
    let pickerData1 = ["0B","1B","2B","3B","4B","5B","6B"] 
    let pickerData2 = ["0Y","1Y","2Y","3Y","4Y","5Y","6Y"] 
    let pickerData3 = ["0G","1G","2G","3G","4G","5G","6G"] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view, typically from a nib. 
     myPicker.dataSource = self 
     myPicker.delegate = self 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 


    //Mark: Delegates and data sources 
    //Mark: Data Sources 
    func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { 
     return 4 
    } 

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
     return pickerData0.count 
    } 
    //Mark: Delegates 

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
     let redIndex = myPicker.selectedRowInComponent(0) 
     let blueIndex = myPicker.selectedRowInComponent(1) 
     let yellowIndex = myPicker.selectedRowInComponent(2) 
     let greenIndex = myPicker.selectedRowInComponent(3) 

     if redIndex + blueIndex + yellowIndex + greenIndex == 6 { 
      myPicker.backgroundColor = UIColor.cyanColor() 
     } else { 
      myPicker.backgroundColor = UIColor.whiteColor() 
     } 
    } 


    func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView { 

     switch component { 
     case 0: 
      var pickerLabel = view as! UILabel! 
      if view == nil { 
       pickerLabel = UILabel() 
       pickerLabel.textColor = UIColor.redColor() 
       pickerLabel.backgroundColor = UIColor.grayColor() 
       pickerLabel.textAlignment = NSTextAlignment.Center 
       pickerLabel.text = pickerData0[row] 
       pickerLabel.font = UIFont(name: "Georgia", size: 26) 
      } 
      return pickerLabel 
     case 1: 
      var pickerLabel = view as! UILabel! 
      if view == nil { 
       pickerLabel = UILabel() 
       pickerLabel.textColor = UIColor.blueColor() 
       pickerLabel.backgroundColor = UIColor.grayColor() 
       pickerLabel.textAlignment = NSTextAlignment.Center 
       pickerLabel.text = pickerData1[row] 
       pickerLabel.font = UIFont(name: "Georgia", size: 26) 
      } 
      return pickerLabel 
     case 2: 
      var pickerLabel = view as! UILabel! 
      if view == nil { 
       pickerLabel = UILabel() 
       pickerLabel.textColor = UIColor.yellowColor() 
       pickerLabel.backgroundColor = UIColor.grayColor() 
       pickerLabel.textAlignment = NSTextAlignment.Center 
       pickerLabel.text = pickerData2[row] 
       pickerLabel.font = UIFont(name: "Georgia", size: 26) 
      } 
      return pickerLabel 
     case 3: 
      var pickerLabel = view as! UILabel! 
      if view == nil { 
       pickerLabel = UILabel() 
       pickerLabel.textColor = UIColor.greenColor() 
       pickerLabel.backgroundColor = UIColor.grayColor() 
       pickerLabel.textAlignment = NSTextAlignment.Center 
       pickerLabel.text = pickerData3[row] 
       pickerLabel.font = UIFont(name: "Georgia", size: 26) 
      } 
      return pickerLabel 
     default: 
      return pickerView 
     } 
    } 
} 

ответ

0

U want pickerLabel background in view (selected), чтобы превратить голубой вместо всех четырех компонентов. U может изменить код в pickviewdidSelectRow:

if redIndex + blueIndex + yellowIndex + greenIndex == 6 { 
     myPicker.backgroundColor = UIColor.cyanColor() 
    } else { 
     myPicker.backgroundColor = UIColor.whiteColor() 
    } 

к:

if redIndex + blueIndex + yellowIndex + greenIndex == 6 { 
    myPicker.viewForRow(row, forComponent: component)?.backgroundColor = UIColor.cyanColor() 
} else { 
    myPicker.viewForRow(row, forComponent: component)?.backgroundColor = UIColor.whiteColor() 
} 

BTW Я не уверен, является ли соответствовать вашим потребностям.

+0

спасибо, что поставили меня на правильный путь. Я изменил код следующим образом, чтобы все четыре фонового pickerLabel превратились в голубые. – Maufox

Смежные вопросы