with how example done ios swift uipickerview

ios - how - UIPickerview mejores prácticas?



uipickerview add done button (2)

Depende de la apariencia del controlador. Si solo hay una acción de selección por pantalla, será mejor colocar Table View en ella y la fila seleccionada será la selección actual.

Si la pantalla tiene múltiples campos, ese usuario debería actuar, entonces, en mi opinión, es mejor colocar el button label + sobre ella y cuando el usuario presiona este button , solo se muestra la Picker View del Picker View desde la parte inferior de la pantalla. Cuando el usuario selecciona una fila en la Picker View selector, cambia el texto de la etiqueta, pero no oculte el selector, debe hacerlo presionando el button "Listo" que colocó arriba.

Espero que esto ayude.

Actualización :

Tu problema porque simplemente te olvidaste de establecer la propiedad UIPickerView de UIPickerView

Solo haz: gradePicker.dataSource = self en viewDidLoad()

Y no olvide implementar el protocolo aquí: class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource

Actualización 2 :

Finalmente lo hizo. Si agrega UIPickerView en inputView de su TextFiled, NO debe estar en IB. Así que puedes eliminarlo del guión gráfico (o .xib, si lo usas).

Luego cambia el código para ser algo como esto:

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

Una breve pregunta: en un proceso de registro, me gustaría pedirle al usuario que elija un valor de una lista de valores.

¿Es la forma correcta de usar un controlador de vista agregando allí todos los campos de texto y para los valores una vista de selector? Como la vista del selector necesita tanto espacio entre los campos de texto, me pregunto cuál sería la mejor práctica en este caso.

este es mi código hasta ahora:

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

La vista de selección está oculta al principio y aparece solo cuando selecciono el campo de texto, esto está bien hasta ahora ... Pero la vista de selección está vacía ...


Primer conjunto delegado

UIPickerViewDataSource,UIPickerViewDelegate

establecer IBOutlet para UIPickerView

@IBOutlet weak var pickerView: UIPickerView!

Toma una matriz para datos

var arrayFruits = [String]()

Escriba este código en viewDidLoad ()

arrayFruits = ["Apple","Banana","Orange","Grapes","Watermelon"] self.pickerView.dataSource = self self.pickerView.delegate = self

Escriba los métodos de delegado de vista de selector

//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% funcionando y probado.