UIPickerview最佳实践?

时间:2015-02-20 13:34:38

标签: ios swift uipickerview

一个简短的问题:在注册过程中,我想要求用户从值列表中选择一个值。

使用视图控制器添加所有文本字段以及选择器视图的值是否是正确的方法?由于选择器视图在文本字段区域之间需要这么大的空间,我想知道在这种情况下最佳实践是什么?

到目前为止,这是我的代码:

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]

}

选择器视图在开头隐藏,只有在我选择文本字段时才会显示,到目前为止这很好......但是选择器视图是空的......

controller view with open picker view

2 个答案:

答案 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]
}

enter image description here

100%正常工作并经过测试

相关问题