2017-09-04 62 views
0

我在尋找非常多,但我沒有找到我的問題的答案。 我的應用程序應該改變另一個選擇器更改後的一個選擇器的數據。你可以看到,在titleForRow方法中,我想設置數據,我也知道這個方法只是調用一次,但我不知道在哪裏以及如何做。更改UIPickerView Swift的數據

我認爲,在didSelectRow方法中,我也可以設置數據,但是在那裏我沒有閃光燈,我應該怎麼做。

這是我的代碼,我希望這是有幫助的。

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { 
    var x = 0 
    @IBOutlet weak var leaguePicker: UIPickerView! 
    @IBOutlet weak var clubPicker: UIPickerView! 
    let league = ["Bundesliga", "Premier League"] 
    let club = [["ManCity", "Arsenal"],["Bayern", "Dortmund"]] 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     leaguePicker.delegate = self 
     leaguePicker.dataSource = self 
     clubPicker.delegate = self 
     clubPicker.dataSource = self 
    } 

    func numberOfComponents(in picker: UIPickerView) -> Int { 
     return 1 
    } 

    func pickerView(_ picker: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    { 
     switch (picker){ 
      case leaguePicker: 
       return league.count 
      case clubPicker: 
       return club.count 
      default: 
       return 1 
     } 
    } 

    func pickerView(_ picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     switch (picker){ 
      case leaguePicker: 
       return league[row] 
      case clubPicker: 
       if (x==0){ 
        print("titleForRow call.. x=0") 
        return club[0][row] 
        // this is just happening at the beginning 
       } else { 
        print("titleForRow call.. x=1") 
        return club[1][row] 
        // this does not happen 
       } 
      default: return "an error occurred" 
     } 
    } 

    func pickerView(_ picker: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
    { 
     if (picker == leaguePicker) { 
      if (row==0){ 
       //clubPicker.selectRow(0, inComponent: 0, animated: true) 
       x=0 
      } else { 
      x=1 // this call is working 
      //clubPicker.selectRow(0, inComponent: 1, animated: true) 
      } 
     } 
    picker.reloadAllComponents() 
    //this does not lead to call titleForRow 
    } 
} 

回答

0

當第一個選擇器中的值發生變化時,您需要重新加載第二個選擇器。

func pickerView(_ picker: UIPickerView, didSelectRow row: Int, inComponent component: Int) 
{ 
    if (picker == leaguePicker) { 
     x = row 
     clubPicker.reloadAllComponents() 
    } 
} 

您還需要修復的numberOfRowsInComponent

​​

而且你titleForRow可以簡化爲:

func pickerView(_ picker: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    switch (picker){ 
     case leaguePicker: 
      return league[row] 
     case clubPicker: 
      return club[x][row] 
     default: return "an error occurred" 
    } 
} 

我也建議你重新命名x可變的東西,如更多的有用selectedLeague