多个UIPickerView在同一个UIView中

我是iOS开发人员的完全初学者,我想创建一个小iOS应用程序。 在这个应用程序中,3个UIPickerViews应该显示不同的数据。

我的问题在于显示屏。 我习惯在Android或Windows手机上开发,我不明白如何使用不同的数据填充UIPickerViews

这是我已编写的代码:

 // // ViewController.swift // iphoneVersion // // Created by fselva on 13/05/2015. // Copyright (c) 2015 fselva. All rights reserved. // import UIKit class ViewController: UIViewController, UIPickerViewDelegate{ @IBOutlet weak var pickerView1: UIPickerView! @IBOutlet weak var pickerView2: UIPickerView! @IBOutlet weak var pickerView3: UIPickerView! var test = ["Todo","Waiting","Maybe","Inbox","Note"] var test2 = ["@Office","@Computer","@Home","@Meeting", "@Read", "@Achat", "@Call"] override func viewDidLoad() { super.viewDidLoad() pickerView1.tag = 1 pickerView2.tag = 2 pickerView3.tag = 3 // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func numberOfComponentsInPickerView(pickerView : UIPickerView!) -> Int{ return 1 } func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ if pickerView2.tag == 2 { return test.count } else if pickerView3 == 3{ return test2.count } return 1 } func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { if pickerView2 == 2 { return test[row] } else if pickerView3 == 3{ return test2[row] } return "" } } 

@IBOutlet weak var pickerView1: UIPickerView! 已经通过Ctrl + Click从故事板自动创建到ViewController.swift。

第一个UIPickerView目前应该什么都不显示。 第二个应该显示test ,第三个显示test2

经过几个小时的互联网调查,我听说过标签来定义谁必须展示什么,但它不起作用。

我做错了什么,我在哪里错过了什么?

你不需要标签,只需使用:

  func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{ if pickerView == pickerView1 { //pickerView1 } else if pickerView == pickerView2{ //pickerView2 } 

也不要忘记在IB或代码中设置委托:

 pickerView1.delegate = self 

您正在将实例与标签进行比较。

更换:

 func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { if pickerView2 == 2 { return test[row] } else if pickerView3 == 3{ return test2[row] } return "" } 

有:

 func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { if pickerView2.tag == 2 { return test[row] } else if pickerView3.tag == 3 { return test2[row] } return "" } 

无论如何,你不需要标记你的选择器。 拾取器包含数据源和委托方法。 您可以比较实例。 像这样的东西:

 func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! { if pickerView2 == pickerView { return test[row] } if pickerView3 == pickerView { return test2[row] } return "" } 

这是Swift 3中TextField中的Full Source Multiple UIPickerView

 class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { @IBOutlet weak var textFiel1: UITextField! @IBOutlet weak var textFiel_2: UITextField! let piker1 = UIPickerView() let piker2 = UIPickerView() let country = ["Ban","Ind","PK"] let number = ["1","2","3"] override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. piker1.dataSource = self piker1.delegate = self piker2.dataSource = self piker2.delegate = self piker1.tag = 1 piker2.tag = 2; textFiel1.inputView = piker1 textFiel_2.inputView = piker2 } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pickerView == piker1 { return country.count } else if pickerView == piker2{ return number.count } return 1 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pickerView == piker1 { return country[row] } else if pickerView == piker2{ return number[row] } return "" } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pickerView == piker1 { textFiel1.text = country[row] self.view.endEditing(false) } else if pickerView == piker2{ textFiel_2.text = number[row] self.view.endEditing(false) } } } 

尝试这个:

在此处输入图像描述

  class UserConfig: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate { @IBOutlet weak var lblPeso: UILabel! @IBOutlet weak var lblAlto: UILabel! @IBOutlet weak var pickerView: UIPickerView! @IBOutlet weak var btPeso: UIButton! @IBOutlet weak var btAlto: UIButton! var pulsado = 1 let userDefault = UserDefaults.standard let pesoArray = [50,51,52,53,54,55,56,57,58,59, 60,61,62,63,64,65,66,67,68,69, 70,71,72,73,74,75,76,77,78,79, 80,81,82,83,84,85,86,87,88,89, 90,91,92,93,94,95,96,97,98,99, 100,101,102,103,104,105,106,107,108,109, 110,111,112,113,114,115,116,117,118,119, 120,121,122,123,124,125,126,127,128,120, 130] let altoArray = [150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212] override func viewDidLoad() { super.viewDidLoad() pickerView.delegate = self pickerView.dataSource = self } override func touchesBegan(_ touches: Set, with event: UIEvent?) { self.view.endEditing(true) } @IBAction func volver(_ sender: Any) { self.dismiss(animated: true, completion: nil) } func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if pulsado == 1 { return altoArray.count } else { return pesoArray.count } } func numberOfComponents(in pickerView: UIPickerView) -> Int { return 1 } func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if pulsado == 1{ return String(format: "%i", altoArray[row]) }else{ return String(format: "%i", pesoArray[row]) } } func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { if pulsado == 1 { lblAlto.text = String(format: "%i", altoArray[row]) } else { lblPeso.text = String(format: "%i", pesoArray[row]) } } @IBAction func altoPressed(_ sender: Any) { pulsado = 1 pickerView.reloadAllComponents() } @IBAction func pesoPressed(_ sender: Any) { pulsado = 2 pickerView.reloadAllComponents() } }