一个简短的问题:在注册过程中,我想要求用户从值列表中选择一个值。
使用视图控制器添加所有文本字段以及选择器视图的值是否是正确的方法?由于选择器视图在文本字段区域之间需要这么大的空间,我想知道在这种情况下最佳实践是什么?
到目前为止,这是我的代码:
class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{
@IBOutlet weak var gradeTextField: UITextField!
@IBOutlet weak 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()
statusMessageLabel.hidden = true
gradePicker.dataSource = self
gradePicker.delegate = self
gradePicker.hidden = true
gradeTextField.inputView = UIPickerView()
gradeTextField.text = gradePickerValues[0]
}
选择器视图在开头隐藏,只有在我选择文本字段时才会显示,到目前为止这很好......但是选择器视图是空的......
答案 0 :(得分:26)
这取决于控制器的外观。如果每个屏幕只有一个选择操作,最好将Table View
放在其上,所选行将是当前选择。
如果屏幕有多个字段,该用户应该采取行动,那么,在我看来,最好将label
+ button
置于其上方,当用户按此{{1你只是从屏幕底部显示button
。当用户选择Picker View
中的任何一行时,您需要更改标签文字,但不要隐藏选择器本身,应该按下"完成" Picker View
你放在上面。
希望这有帮助。
<强>更新强>:
您的问题,因为您忘记设置button
dataSource
属性
在UIPickerView
gradePicker.dataSource = self
请勿忘记在此处实施协议:viewDidLoad()
更新2 :
终于做到了。如果在textFiled的inputView中添加class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
,那么它不应该在IB中。所以你可以从storyboard(或.xib,如果你使用它)中删除它。
然后将代码更改为:
UIPickerView
答案 1 :(得分:5)
首先设置代理
UIPickerViewDataSource,UIPickerViewDelegate
为UIPickerView设置IBOutlet
@IBOutlet weak var pickerView: UIPickerView!
获取数据数组
var arrayFruits = [String]()
在viewDidLoad()
上编写此代码 arrayFruits = ["Apple","Banana","Orange","Grapes","Watermelon"]
self.pickerView.dataSource = self
self.pickerView.delegate = self
编写选择器视图委托方法:
//MARK: - Pickerview method
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return arrayFruits.count
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return arrayFruits[row]
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
self.labelFruit.text = arrayFruits[row]
}
100%正常工作并经过测试