2017-09-04 28 views
0

私は検索していましたが、私の質問に答えが見つかりませんでした。 私のアプリは、他のピッカーが変更された後、あるピッカーのデータを変更する必要があります。UIPickerView Swiftのデータを変更する

titleForRowメソッドでは、データを設定したいと思いますが、このメソッドは一度呼び出されただけですが、どこでどのようにしたらよいか分かりません。

私は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

第1ピッカーの値が変更されたら、第2ピッカーを再読み込みする必要があります。

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

関連する問題