这取决于控制器的外观。如果每个屏幕只有一个选择操作,那么最好将Table View
在其上,所选行将是当前选择。
如果屏幕有多个字段,用户应该使用它,那么,在我看来,最好把label
+ button
在其上方,当用户按下此按钮时button
你只是表明Picker View
从屏幕底部。当用户选择任意行时Picker View
您更改标签文本,但不要隐藏选择器本身,应该通过按“完成”来完成button
你放在上面。
希望这可以帮助。
Update:
你的问题是因为你忘记设置dataSource
的财产UIPickerView
做就是了:gradePicker.dataSource = self
in viewDidLoad()
并且不要忘记在这里实现协议:class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
Update 2:
终于成功了。如果你添加UIPickerView
在你的textFiled的inputView中,那么它不应该在IB中。因此,您可以将其从故事板(或 .xib,如果您使用它)中删除。
然后将代码更改为如下所示:
class RegisterViewController: 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]
}
}