2017-04-03 2 views
2

En essayant d'avoir deux pickerViews différents sur le même viewController et de les laisser représenter des données différentes. J'ai essayé différentes manières de le faire, mais les deux vues du sélecteur montrent les mêmes données, mais ne peuvent pas tout rassembler. Toute aide serait géniale!Plusieurs UIPickerViews personnalisées dans le même UIView dans swift

voici mon code:

@IBOutlet weak var Eventtype: UITextField! 


    let pickerView = UIPickerView() 

    var Eventstype = ["Birthday" , "Marriege" , "Get together", "Conference"] 

    @IBOutlet weak var datepickertxt: UITextField! 

    var datepicker = UIDatePicker() 

    @IBOutlet weak var Duration: UITextField! 
    let duration = UIPickerView() 

    var Durations = ["6-8","1-5","7-9","10-12"] 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     createDatePicker() 
     pickerView.delegate = self 
     pickerView.dataSource = self 
     duration.delegate = self 
     duration.dataSource = self 
     Eventtype.inputView = pickerView 
     Duration.inputView = duration 
     // Do any additional setup after loading the view. 
    } 
    ////For Event Picker view 

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

     return 1 


    } 

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

     if (pickerView.tag == 0) { 
      //pickerView1 
      return Eventstype.count 
     } else if (duration.tag == 1){ 
      //pickerView2 
      return Durations.count 
     } 
     return 1 
     //return DurationTxt.count 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     if (pickerView.tag == 0) { 

      return Eventstype[row] 
     } else if (duration.tag == 1){ 

      return Durations[row] 
     } 

     return "" 
    } 
     //return DurationTxt[row] 


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

     if (pickerView.tag == 0) { 
      Eventtype.text = Eventstype[row] 
      self.view.endEditing(false) 
     }else if (duration.tag == 1){ 
      Duration.text = Durations[row] 
      self.view.endEditing(true) 

     } 

    } 
+0

Vous êtes en train de vérifier les balises, mais vous n'avez pas assigné de valeurs pour les balises vues sélecteur. –

Répondre

0

Définir les balises pour pickerview dans viewDidLoad comme indiqué ci-dessous,

pickerView.tag = 0 
duration.tag = 1 
+0

Merci beaucoup Sandeep son travail – santoshi

1
@IBOutlet weak var Eventtype: UITextField! 


    let pickerView = UIPickerView() 

    var Eventstype = ["Birthday" , "Marriege" , "Get together", "Conference"] 

    @IBOutlet weak var datepickertxt: UITextField! 

    var datepicker = UIDatePicker() 

    @IBOutlet weak var Duration: UITextField! 
    let duration = UIPickerView() 

    var Durations = ["6-8","1-5","7-9","10-12"] 


    override func viewDidLoad() { 
     super.viewDidLoad() 

     createDatePicker() 
     pickerView.delegate = self 
     pickerView.dataSource = self 
     duration.delegate = self 
     duration.dataSource = self 
     Eventtype.inputView = pickerView 
     Duration.inputView = duration 
     pickerView.tag = 0 
     duration.tag = 1 
     // Do any additional setup after loading the view. 
    } 
    ////For Event Picker view 

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

     return 1 


    } 

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

     if (pickerView.tag == 0) { 
      //pickerView1 
      return Eventstype.count 
     } else if (duration.tag == 1){ 
      //pickerView2 
      return Durations.count 
     } 
     return 1 
     //return DurationTxt.count 
    } 

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
     if (pickerView.tag == 0) { 

      return Eventstype[row] 
     } else if (duration.tag == 1){ 

      return Durations[row] 
     } 

     return "" 
    } 
     //return DurationTxt[row] 


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

     if (pickerView.tag == 0) { 
      Eventtype.text = Eventstype[row] 
      self.view.endEditing(false) 
     }else if (duration.tag == 1){ 
      Duration.text = Durations[row] 
      self.view.endEditing(true) 

     } 

    } 

Cela se fait par tag ou autre yo peut vérifier déléguer comme

if pickerView == duration 
0
class ViewController: UIViewController { 

    @IBOutlet var txtDuration: UITextField! 
    @IBOutlet var txtEventType: UITextField! 

    var pickerView = UIPickerView() 

    var arrEventType : [String] = [] 
    var arrDuration : [String] = [] 

    var currentTextField : UITextField? 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     arrEventType = ["Birthday" , "Marriage" , "Get together", "Conference"] 
     arrDuration = ["6-8","1-5","7-9","10-12"] 
    } 
} 

extension ViewController : UIPickerViewDelegate , UIPickerViewDataSource { 

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

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

     if currentTextField == txtEventType { 
      return arrEventType.count 
     } else if currentTextField == txtDuration { 
      return arrDuration.count 
     } else { 
      return 0 
     } 
    } 

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

     if currentTextField == txtEventType { 
      return arrEventType[row] 
     } else if currentTextField == txtDuration { 
      return arrDuration[row] 
     } else { 
      return "" 
     } 
    } 

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

     if currentTextField == txtEventType { 
      txtEventType.text = arrEventType[row] 
     } else if currentTextField == txtDuration { 
      txtDuration.text = arrDuration[row] 
     } 
    } 
} 

extension ViewController : UITextFieldDelegate { 

    func textFieldDidBeginEditing(_ textField: UITextField) { 
     self.pickerView.delegate = self 
     self.pickerView.dataSource = self 
     currentTextField = textField 
     if currentTextField == txtEventType { 
      currentTextField?.inputView = pickerView 
     } else if currentTextField == txtDuration { 
      currentTextField?.inputView = pickerView 
     } 

    } 
} 

Au-dessus des lignes de code peut résoudre votre problème avec un seul UIPickerView et sans balises