ios - Swift 4.2 - PickerView 不显示内容
问题描述
这段代码让我很生气。我已经阅读了数千篇教程和堆栈溢出评论......
请帮我。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()
}
解决方案
首先,您不需要在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) {
}
}
推荐阅读
- c - 在 C 中正确打印二叉树
- codeigniter - Codeigniter,将参数传递给语言文件
- python - 如何使用 execute_script 在新选项卡中提交表单
- cmake - 如何在现代 CMake 中覆盖优化级别标志
- java - Retrofit 2 请求返回空对象引用
- ruby - Facebook通过Graph API上传视频字幕不起作用
- docker - 负载均衡在 Docker Swarm 中是如何工作的,与 Kubernetes 有什么区别?
- python-2.7 - 没有绕过(列表索引超出范围)
- mysql - MySQL - 将行作为列和列作为行?
- mysql - Lagom 与 MySQL 数据库连接