2017-05-12 9 views
0

私の目的は、1つのviewControllerで3つのpickerViewを持つことです。各pickerViewは、以前に保存された設定に応じて異なるデータソースを一覧表示します。これらの設定は、データベースから取得されます。私は、以下のswitch文を使ってデータベースから取得した値に応じて、データソースを設定しました。ビューでSwift 3.0データソース変数を認識できない複数のピッカービュー

は負荷をした、私が設定したピッカーの代表者と一緒に、私が持っている:ピッカー代議員については

switch firstValuePulled { 
    case "Animals": 
     var pickerNumber1 = [["Cat", "Dog", "Bird", Fish],["1","2","3","4","5","6"]] 

    case "Sports": 
     var pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]] 

    default: 
     var pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]] 

    } 

switch second ValuePulled { 
    case "Animals": 
     var pickerNumber2 = [["Cat", "Dog", "Bird", Fish],["1","2","3","4","5","6"]] 

    case "Sports": 
     var pickerNumber2 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]] 

    default: 
     var pickerNumber2 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]] 

    } 

switch thirdValuePulled { 
    case "Animals": 
     var pickerNumber1 = [["Cat", "Dog", "Bird", Fish],["1","2","3","4","5","6"]] 

    case "Sports": 
     var pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]] 

    default: 
     var pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]] 

    } 

を、エラーが「未解決識別子 『pickerNumber1』の使用」の下に現れます、 "未解決の識別子 'pickerNumber2'の使用などがあります。switch文が正しく実行されなかったので、代理人にはピッカーを表示する値がありませんでしたか?

func numberOfComponents(in pickerView: UIPickerView) -> Int { 
    return 2 
} 

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { 

    if (pickerView.tag == 1){ 
     return pickerNumber1[component].count; 
    } else if (pickerView.tag == 2){ 
     return pickerNumber2[component].count; 
    } else { 
     return pickerNumber3[component].count; 
    } 

} 

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { 


    if (pickerView.tag == 1){ 
     return pickerNumber1[component][row] 
    } else if (pickerView.tag == 2){ 
     return pickerNumber2[component][row] 
    } else { 
     return pickerNumber3[component][row] 
    } 
} 

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 

    if (pickerView.tag == 1){ 
     eventOneValue = pickerNumber1[0][pickerView.selectedRow(inComponent: 0)] 
     eventOneNumber = pickerView.selectedRow(inComponent: 1) + 1 

     print(eventOneValue) 
    } else if (pickerView.tag == 2) { 
     eventTwoValue = pickerNumber2[0][pickerView.selectedRow(inComponent: 0)] 
     eventTwoNumber = pickerView.selectedRow(inComponent: 1) + 1 
     print(eventTwoValue) 
    } else { 
     eventThreeValue = pickerNumber3[0][pickerView.selectedRow(inComponent: 0)] 
     eventThreeNumber = pickerView.selectedRow(inComponent: 1) + 1 
     print(eventThreeValue) 
    } 


}  

答えて

1

uはswitch文のスコープ内でローカルに pickerNumber1、pickerNumber2を作成しているとUはピッカーデリゲートで使用しているので、これはです! Uクラスでそれらを作成する必要があり、その

クラスYourClassName {

VAR pickerNumber1:アレイは= []

VAR pickerNumber2:配列= []

}のようなスイッチにその値を設定

、その後は{

スイッチfirstValuePulledとしてをそれを使用するステートメントを切り替えますcase "Animals": pickerNumber1 = [["Cat"、 "Dog"、 "Bird"、Fish]、["1"、 "2"、 "3"、 "4"、 "5"、 "6" ]

case "Sports": 
    pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]] 

default: 
    pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]] 

} 

スイッチ第ValuePulled { 場合、 "動物": pickerNumber2 = [ "猫"、 "犬"、 "鳥"、魚]、[ "1"、 "2"、 "3 」、 "4"、 "5"、 "6動物"]

case "Sports": 
    pickerNumber2 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]] 

default: 
    pickerNumber2 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]] 

} 

スイッチ{ 場合thirdValuePulled "": pickerNumber1 = [ "猫"、 "犬"、 "鳥"、魚] 、[1、2、3、4、5、6]]

case "Sports": 
    pickerNumber1 = [["Basketball", "Hockey", "Baseball", "Tennis", "Football"],["1","2","3","4","5","6"]] 

default: 
    pickerNumber1 = [["Apple", "Orange", "Peach"],["1","2","3","4","5","6"]] 

} 

これをピッカーの代理人で使用してください。

+0

上記のようにpickerNumber1、pickerNumber2、およびpickerNumber3をグローバルスコープとして初期化しましたが、「空のコレクションリテラルには明示的な型が必要です」というエラーが表示されました。あなたはその問題が何であるか知っていますか? – Kevin

+0

配列を型で初期化する必要があります あなたのコードを表示します その配列の文字列の配列を含みます そのようにすることができます var pickerNumber1:Array > = [] –

0

これらのピッカーをクラスブロックに宣言します。

しかし、より体系的な方法は、それらのアウトレットを作成し、それらのピッカーのアウトレットに対してテストすることです。