2017-08-11 47 views
0

我在這裏尋找答案,但不相信此問題已得到解答。我有多個文本框,使用幾個不同的選擇器。我希望第一個文本框中的用戶選擇材質,然後根據所選材質只能看到與其相對應的材質類型。在我的代碼中,當我命名我的數組時,可以看到它說typeBrassData或typeCopperData,所以如果用戶選擇Brass或Copper而不是Brass選項,那麼是否有人知道如何做到這一點?下面是我使用的代碼,當它只有2個選擇器視圖。非常感謝!根據之前選擇的內容使用選取器視圖

import UIKit 

class MetalCalculatorViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { 

@IBOutlet weak var materialField: UITextField! 

@IBOutlet weak var typeField: UITextField! 

@IBOutlet weak var volumeField: UITextField! 

@IBOutlet weak var quantityField: UITextField! 

var pickerMaterial = UIPickerView() 

var pickerType = UIPickerView() 


var materialData = ["Brass","Copper","CuNiSn", "Cupro-Nickel","High Performance Alloys", "Leaded Brass","Nickel Silvers","Phosphor Bronze","Tin Brass"] 

var typeData = ["C101", "C102","C1092","C110","C122","C14415","C151", "C155","C18070", "C18080", "C19020", "C19025", "C19210","C194", "C195", "C197", "C1972", "C210","C220", "C226", "C230", "C240", "C260","C268","C272", "C350", "C353", "C422", "C425", "C4252", "C510","C511", "C5118", "C519","C521", "C638", "C654", "655", "C688", "C7025", "C70250", "C7026", "C7035", "C706", "C710", "C715", "C7250", "C752", "C757","C764","C770", "XP5", "XP10", "XP55", "XP125", "XP150", "XP175", "MAX251C", "MSP1"] 

var typeBrassData = ["C210","C220", "C226", "C230", "C240", "C260","C268","C272"] 
var typeHighPerformanceData = ["C14415","C151", "C155","C18070", "C18080", "C19020", "C19025", "C19210","C194", "C195", "C197", "C1972", "C638", "C654", "655", "C688", "C7025", "C70250", "C7026", "C7035", "XP5", "XP10", "XP55", "XP125", "XP150", "XP175", "MAX251C", "MSP1"] 
var typeCopperData = ["C101", "C102","C1092","C110","C122"] 
var typeCuproNickelData = ["C706", "C710", "C715"] 
var typeLeadedBrassData = ["C350", "C353"] 
var typeTinBrassData = ["C422", "C425", "C4252"] 
var typePhosphorBronzeData = ["C510","C511", "C5118", "C519","C521"] 
var typeCunNiSnData = ["C725"] 
var typeNickelSilverData = ["C752", "C757","C764","C770"] 

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

override func viewDidLoad() { 
    super.viewDidLoad() 

    pickerMaterial.delegate = self 
    pickerMaterial.dataSource = self 
    pickerMaterial.tag = 1 

    materialField.inputView = pickerMaterial 

    pickerType.delegate = self 
    pickerType.dataSource = self 
    pickerType.tag = 2 

    typeField.inputView = pickerType 

    let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(MetalCalculatorViewController.dismissKeyboard)) 
    view.addGestureRecognizer(tap) 



    // Do any additional setup after loading the view. 

} 

func dismissKeyboard() { 
    view.endEditing(true) 
} 

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

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



    if pickerView == pickerMaterial { 
     return materialData.count 

    } else if pickerView == pickerType{ 
     return typeData.count 
    } 

    return 1 
} 

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


    if pickerView == pickerMaterial { 
     return materialData[row] 

    } else if pickerView == pickerType{ 
     return typeData[row] 
    } 
    return "" 
} 



func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if pickerView == pickerMaterial { 
     materialField.text = materialData[row] 
    } else if pickerView == pickerType{ 
     typeField.text = typeData[row] 
    } 
} 

回答

0

可以使用dictionary數據結構來設置pickerviews值

var materialSelected = "" 

var typeArr = [String]() 


//I have done for only three materials obviously you can extend it... 

var dict = ["Brass" : ["C210","C220", "C226", "C230", "C240", "C260","C268","C272"], 
      "Copper" : ["C101", "C102","C1092","C110","C122"], "CuNiSn" : ["C725"]] as [String: Any] 

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

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



    if pickerView == pickerMaterial { 
     return materialData.count 

    } else if pickerView == pickerType{ 
     typeArr = dict[materialSelected] as! [String] 
     return typeArr.count 
    } 

    return 1 
} 

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


    if pickerView == pickerMaterial { 
     return materialData[row] 

    } else if pickerView == pickerType{ 
     typeArr = dict[materialSelected] as! [String] 
     return typeArr[row] 
    } 
    return "" 
} 



func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { 
    if pickerView == pickerMaterial { 
     materialSelected = materialData[row] 
     materialField.text = materialSelected 

    } else if pickerView == pickerType{ 

     typeArr = dict[materialSelected] as! [String] 
     typeField.text = typeArr[row] 

    } 
} 
相關問題