Ответ 1
Это зависит от внешнего вида контроллера. Если на экране будет только одно действие, то лучше поставить Table View
на него, а выбранная строка будет текущей.
Если на экране есть многократные поля, с которыми должен действовать пользователь, то, на мой взгляд, лучше разместить над ним label
+ button
, а когда пользователь нажмет этот button
, вы просто покажете Picker View
с экрана дно. Когда пользователь выбирает любую строку в Picker View
, вы меняете текст ярлыка, но не скрываете сам сборщик, это нужно сделать, нажав "Done" button
, который вы разместили выше.
Надеюсь, что это поможет.
Обновление
Ваша проблема, потому что вы просто забыли установить dataSource
свойство UIPickerView
Просто выполните: gradePicker.dataSource = self
в viewDidLoad()
И не забудьте реализовать здесь протокол: class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource
Обновление 2:
Наконец сделал. Если вы добавите UIPickerView
в inputView вашего textFiled, тогда он НЕ должен быть в 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]
}
}