UIPickerView不显示数据Swift 3

Posted

技术标签:

【中文标题】UIPickerView不显示数据Swift 3【英文标题】:UIPickerView not displaying data Swift 3 【发布时间】:2017-06-27 16:37:10 【问题描述】:

我有相关的函数来在这里显示我的选择器中的数据,当调用相关函数时,选择器被添加到视图中,但它是空白的。这是我的课:

class StatePickerView : UIPickerView, UIPickerViewDelegate, UIPickerViewDataSource 

private let states = ["Illinois", "Arizona", "Indiana", "New York", "Oklahoma", "California", "Kentucky", "North Carolina", "Texas", "Massachisetts", "Ohio", "Wisonsin"]

var statePickerDelegate: StatePickerDelegate?

override init(frame: CGRect) 
    super.init(frame: frame)
    self.backgroundColor = .magenta




required init?(coder aDecoder: NSCoder) 
    fatalError("init(coder:) has not been implemented")


func numberOfComponents(in pickerView: UIPickerView) -> Int 
    debugPrint("numberOfComponnets")
    return 1


func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? 
    switch component 
    case 0:
        return states[row]
    default:
        return "row"
    



func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int 
    return states.count


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

我有一个协议方法,但它没有添加任何东西。

我在不同的 ViewController 中调用它:

fileprivate let statePicker = StatePickerView()

override func viewDidLoad() 
    super.viewDidLoad()
    self.statePicker.statePickerDelegate = self

然后当一个按钮被点击时,它被添加为一个子视图:

    func changeButtonTapped() 
    self.changeButtonClicked = true
    self.statePicker.statePickerDelegate = self
    self.statePicker.reloadAllComponents()

    self.view.addSubview(self.statePicker)
    self.statePicker.snp.remakeConstraints 
        $0.top.equalTo(self.currentStateView.snp.bottom)
        $0.bottom.equalTo(self.view.snp.bottom)
        $0.width.equalTo(self.view.snp.width)
        $0.centerX.equalTo(self.view.snp.centerX)
    

我已经梳理并尝试了 Stack Overflow 上几乎所有相关的东西,但我很难过。我的 titleForRow 函数甚至从未被击中。我的错在哪里?

【问题讨论】:

【参考方案1】:

固定: 我没有将类继承自 UIPickerView,而是将其更改为 UIView。我实例化了一个 UIPicker 的实例,然后在类的实例化时将选择器添加到视图中。

对于委托,我在 override init 方法中做了以下操作:

    self.pickerView.delegate = self
    self.pickerView.dataSource = self

【讨论】:

以上是关于UIPickerView不显示数据Swift 3的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 如何从 UIPickerView 生成数据的许多 UITextField 中读取数据 [关闭]

Swift:点击 UITextField 时如何显示 UIPickerView

Swift 中带有“外部”数据源和委托的 UIPickerView

Swift 3 中的 UIPickerView 和子类数组

想要在 UIAlertController 或 UIPopoverController Swift 中显示 UIPickerView?

Swift - 水平 UIPickerView