UIPickerview最佳实践?

use*_*112 19 uipickerview ios swift

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

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

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

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]

}
Run Code Online (Sandbox Code Playgroud)

pickerview在开头隐藏,只在我选择文本字段时出现,到目前为止这很好......但是选择器视图是空的......

控制器视图与打开的选择器视图

Ale*_*min 29

这取决于控制器的外观.如果每个屏幕只有一个选择操作,最好放在Table View它上面,所选行将是当前选择.

如果屏幕有多个字段,那个用户应该采取行动,那么,在我看来,最好把label+ button放在它上面,当用户按下这个button你只是Picker View从屏幕底部显示.当用户选择Picker View您更改标签文本中的任何行时,但不要隐藏选择器本身,应该按下button放在上面的"完成"来完成.

希望这可以帮助.


更新:

你的问题是因为你忘了设置dataSource属性UIPickerView

只是做:gradePicker.dataSource = selfinviewDidLoad()

并且不要忘记在这里实现协议: class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource


更新2:

终于做到了.如果你添加UIPickerViewtextFiled的inputView,那么它不应该在IB中.所以你可以从storyboard(或.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]
    }
}
Run Code Online (Sandbox Code Playgroud)


Mr.*_*ani 6

第一组代表

UIPickerViewDataSource,UIPickerViewDelegate
Run Code Online (Sandbox Code Playgroud)

为UIPickerView设置IBOutlet

@IBOutlet weak var pickerView: UIPickerView!
Run Code Online (Sandbox Code Playgroud)

获取数据数组

var arrayFruits = [String]()
Run Code Online (Sandbox Code Playgroud)

在viewDidLoad()上编写此代码

  arrayFruits = ["Apple","Banana","Orange","Grapes","Watermelon"]
  self.pickerView.dataSource = self
  self.pickerView.delegate = self
Run Code Online (Sandbox Code Playgroud)

编写选择器视图委托方法:

 //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]
}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

100%工作和测试