【问题标题】:Swift 4.2 - PickerView not showing ContentSwift 4.2 - PickerView 不显示内容
【发布时间】:2018-12-27 10:19:10
【问题描述】:

这段代码让我很生气。我已经阅读了数千篇教程和堆栈溢出 cmets....

请帮助我。 Picker 只包含一个空白的灰色屏幕。

代码在这里:

GenderPickerModel.swift

    import UIKit

class GenderPickerModel:  NSObject, UIPickerViewDataSource, UIPickerViewDelegate {

    let genderPickerData: [String] = ["male", "female"]

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

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

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return genderPickerData[row]
    }

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

    } 
}

并在控制器中使用:

@IBOutlet weak var gender: UITextField!  
private var genderPickerView: UIPickerView?

override func viewDidLoad() {
        super.viewDidLoad()
        loadProfile()
        prepareView()
    }

    func prepareView() {
        genderPickerView = UIPickerView.init()

        let gpModel = GenderPickerModel()

        genderPickerView?.delegate = gpModel
        genderPickerView?.dataSource = gpModel
        gender.inputView = genderPickerView;
        genderPickerView?.selectRow(0, inComponent: 0, animated: true)
        genderPickerView?.reloadAllComponents()
    }

【问题讨论】:

  • 你为什么要创建 GenderPickerModel 的实例并分配给 dataSource 和委托,你能告诉我整个代码在一个控制器中吗?
  • 我敢打赌,如果你将断点放在模型中,它不会停在那里,这意味着代表不工作
  • @AbhishekJadhav 因为这个控制器拥有 5 个 PickerView。我想将这些与 Controller 类分开
  • @ironRoei 但为什么呢?为数据创建一个单独的类并在调用控制器中包含代码有什么区别?

标签: ios swift


【解决方案1】:

首先,你不需要在pickerview类中做单独的性别数组,你不需要创建pickerview的实例。

由此,您可以在 custompickerview 中看到您的数据源

/**
Controller code where you can create instantiate picker assign data 

*/
    class ViewController: UIViewController {

        @IBOutlet weak var textField: UITextField!            
        let genderPickerData : [String] = ["male", "female"]

        override func viewDidLoad() {
            super.viewDidLoad()

            prepareView()
        }

        func prepareView() {

            genderPickerView = UIPickerView()

            let gpModel = GenderPickerModel()

            gpModel.data = genderPickerData

            gpModel.dataSource = gpModel
            gpModel.delegate = gpModel
            textField.inputView = gpModel

        }
    }

/**

Custom pickerview class where you can handle data 

*/
import UIKit

class GenderPickerModel: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate {

    var data = [String]()

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

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

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return data[row]
    }

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

    }

}

【讨论】:

  • 谢谢,但是内容还是空的! :(
  • 我试过这段代码,它可以在pickerview中显示数据源,因为我提到你必须创建一个自定义的pickerview类并实现?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-23
  • 2019-04-14
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多