我一直在研究创建UIPickerView的各种方法,每次遇到相同的问题时:
我收到错误消息:
类型'timeselectviewController'不符合协议 'UIPickerViewDataSource'
和pickerView函数总是得到警告:
实例方法'pickerView(pickerView:titleForRow:forComponent :)' 几乎符合可选要求 协议的'pickerView(_:titleForRow:forComponent :)' 'UIPickerViewDelegate'
这是到目前为止的代码:
import UIKit
class timeselectviewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var gradeTextField: UITextField!
var gradePicker: UIPickerView!
let gradePickerValues = ["5. Klasse", "6. Klasse", "7. Klasse"]
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int{
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return gradePickerValues.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return gradePickerValues[row]
}
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int){
gradeTextField.text = gradePickerValues[row]
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad()
gradePicker = UIPickerView()
gradePicker.dataSource = self
gradePicker.delegate = self
gradeTextField.inputView = gradePicker
gradeTextField.text = gradePickerValues[0]
}
}
答案 0 :(得分:0)
关于“不符合协议”警告,这是因为协议具有某些必需的方法。如果点击警告,它将为您提供添加方法“存根”的机会:
如果选择“修复”选项,它将添加缺少的必需UIPickerViewDataSource
委托方法:
您显然必须为这些方法编写代码,但是它将准确地向您显示缺少哪些方法以及您必须做什么。
请注意,它是numberOfComponents(in:)
,而不是numberOfComponentsInPickerView(pickerView:)
。您所看到的似乎是旧的Swift 2语法。
关于“几乎匹配的可选要求”警告:
titleForRow
和didSelectRow
都缺少第一个参数的_
argument label。它们分别是:
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { ... }
和
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { ... }`
请注意_
参数标签,就像对numberOfRowsInComponent
一样。
每当您看到这样的警告时,请仔细阅读所涉及协议的文档(在这种情况下为UIPickerViewDelegate
)。
通常,如果您点击警告,它甚至会为您提供一个选项,让Xcode为您修复方法签名。选择标有“ ...满足此要求”的选项,而不是标有“ ...使此警告静音”的选项:
最重要的是,每当您看到有关缺少协议要求的警告和/或“几乎匹配”的警告时,请尝试编译器建议的修复和/或仔细检查协议文档。