2017-01-04 10 views
0

1つのVCに2つのピッカーがあり、これを処理する必要があることがわかります。しかし、私の頭の中でこのことを知っていて、私は自分のメソッドを正しく返すべきかどうかわからない。1つのVCで2つのUIピッカーを使用してデリゲートメソッドを処理する

ここにコードがあります。正しい戻り値が得られるまで、コードエラーを防止するために私はちょうど0と ""を使用しています。

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    if pickerView == repsPicker { 
     return 1 
    } else if pickerView == setsPicker { 
     return 1 
    } 
    return 1 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if pickerView == repsPicker { 
     return repPickerValues.count 
    } else if pickerView == setsPicker { 
     return self.setsPickerValues.count 
    } 
    return 0 
} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if pickerView == repsPicker { 
     return repPickerValues[row] 
    } else if pickerView == setsPicker { 
     return self.setsPickerValues[row] 
    } 
    return "" 
} 
+0

にあなたが – Matt

+0

イム欲しいものを理解することはできませんあなたのビューコントローラ(またはIBOutlet)に

let picker1 = ... let picker2 = ... 

を各ピッカーを参照してください2つのピッカーを使用すると、どちらもデリゲートが必要です。これはelseで実行されますが、現在のコードを使用して独立した値を返す必要があります。基本的に正しい値を返す方法について助けが必要 – jwarris91

+0

'repPickerValues'と' setsPickerValues'が何であるか、そしてそれらをどのように初期化するのか分からない限り、答えを出すことはできません。 – TheoK

答えて

1
let repPickerValues = ["America", "Mexico", "Canada"] 
let setsPickerValues = ["India", "China", "Malaysia", "Singapore"] 

これらが値であれば、第1ピッカーには3つのオプションがあり、第2ピッカーには4つのオプションがあります。

ラインの下に追加すると、UIPickerViewDelegateUIPickerViewDataSourceに準拠している必要があり、それらの機能

repsPicker.delegate = self 
setsPicker.delegate = self 

そして、あなたのビューコントローラクラスを呼び出します。

class ViewController: UIPickerViewDelegate, UIPickerViewDatSource { 

} 

同様ピッカービューを教えてくれます。この機能は、どのように多くのオプション

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 
    if pickerView == repsPicker { 
     return repPickerValues.count 
    } else if pickerView == setsPicker { 
     return self.setsPickerValues.count 
    } 
    return 0 
} 

示すことをされているこの機能は、ピッカービュー

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    if pickerView == repsPicker { 
     return repPickerValues[row] 
    } else if pickerView == setsPicker { 
     return self.setsPickerValues[row] 
    } 
    return "" 
} 

に値を配置するための責任があり、これはあなたが何であるかですを求めて?

+0

前のコメントを無視してください私はそれらのうちの1人の代理人のことを忘れてしまったようで、これは正しくフィードしているので、これは答えの種類で、十分に近いです – jwarris91

+0

あなたの配列を表示します – Matt

2

各ピッカーにタグを設定して、それらを区別することができます。 pickerView.tagに2つの異なる値を設定し、各デリゲートメソッドでタグ値をチェックして戻り値を決定します。

+0

この方法はうまくいくはずです。最後のビットの周りに頭を浮かべてください。タグや名前を使うのは違いありません。これは同じ状況につながります。 – jwarris91

0

私はここにいくつかのオプションを見ることができます:

  1. 使用異なるデリゲートオブジェクトを各ピッカーため

    picker1.delegate = firstDelegate() 
    picker2.delegate = secondDelegate() 
    

    は、デリゲートオブジェクトのそれぞれに異なった目的のデリゲートメソッドを実装します。

  2. は、その後、あなたのデリゲートメソッド(複数可)

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
        if pickerView == picker1 { 
         ... 
        } 
    } 
    
関連する問題