【问题标题】:How to use 2 UIPickerViews in the same view controller? [duplicate]如何在同一个视图控制器中使用 2 个 UIPickerViews? [复制]
【发布时间】:2017-07-19 15:08:51
【问题描述】:

我下面的代码使用UIPickerView 并且运行良好。但是,我不知道如何为 2 个不同的选择器视图重复此过程,每个视图都包含单独的信息。 l2pl2 是第二个选择器视图和标签。

    import UIKit
class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate{

@IBOutlet var l: UILabel!
@IBOutlet var pl: UIPickerView!
    @IBOutlet var l2: UILabel!
    @IBOutlet var pl2: UIPickerView!
override func viewDidLoad() {
    super.viewDidLoad()
    pl.dataSource = self
    pl.delegate = self
    pl2.dataSource = self
    pl2.delegate = self

}

    let choices = ["1","2","3","4","5","6","7","8","9","10","11"]
    let choices2 = ["1","judo","3","4","5","6","7","8","9","10","11"]

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

}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if pickerView == pl {
        return choices[row]
    } else if pickerView == pl2 {
        return choices2[row]
    } else {
        return nil
    }
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {


return choices.count
    return choices2.count

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


    if pickerView == pl {
         l.text = choices[row]
    } else if pickerView == pl2 {
            l2.text = choices2[row]
    }
}

}

【问题讨论】:

  • 也为pl2绑定数据源和委托。
  • (下次裁剪图像。空白不重要)

标签: ios swift datasource uipickerview


【解决方案1】:

您在委托方法中有对 UIPickerView 的引用,因此您可以执行以下代码:

func numberOfComponents(in pickerView: UIPickerView) -> Int {
    if(pickerView == pl) {
      //pl specific code
    }
    if(pickerView == pl2) {
       //pl2 specific code
    }
}

对每种方法都这样做。

【讨论】:

    【解决方案2】:

    您还必须将您的ViewController 设置为pl2DataSourceDelegate,并且在委托和数据源方法中您应该过滤UIPickerView

    class ViewController: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate{
    
    @IBOutlet var l: UILabel!
    @IBOutlet var pl: UIPickerView!
    @IBOutlet var l2: UILabel!
    @IBOutlet var pl2: UIPickerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        pl.dataSource = self
        pl.delegate = self
        pl2.dataSource = self
        pl2.delegate = self
    }
    
    let choices = ["1","2","3","4","5","6","7","8","9","10","11"]
    
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if pickerView == pl1 {
            return choices[row]
        } else if pickerView == pl2 {
            return choices2[row] //or whatever you want to use as the dataSource for pl2
        } else {
            return nil
        }
    }
    
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        //do the same as above
        return choices.count
    }
    
    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        //do the same as above
        l.text = choices[row]
    }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-27
      • 1970-01-01
      • 2017-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多