Как вернуть выбранное значение в UIPickerDelegate при создании программно
У меня есть viewController
это имеет кучу входов на нем. Некоторые из них - обычный текст, но некоторые требуют ввода от сборщика. Я решил перенести реализацию каждого PickerDelegate
а также PickerDataSource
в отдельный файл, чтобы держать вещи немного чище. Данные появляются, но при выборе средства выбора я не знаю, как вызвать событие в моем viewController. В настоящее время он срабатывает только в классе PickerDelete.
Некоторая основная информация макета
class MyClass: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
let jobTypePickerValues = ["value1", "value2"]
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
// returns the # of rows in each component..
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return jobTypePickerValues.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return jobTypePickerValues[row]
}
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int)
{
//println("I want this in the view controller that set up the picker")
}
На мой взгляд контроллер, который показывает сборщик у меня есть следующее
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
myClassSource = MyClass()
pickerView = UIPickerView()
pickerView.dataSource = myClassSource
pickerView.delegate = myClassSource
// set the input view of the job type to be a picker view
textInput.inputView = pickerView
textInput.text = jobTypePickerValues[0]
}
1 ответ
Вам нужно создать один пользовательский делегат и реализовать в ViewController
где вы создаете pickerView.
protocol CustomPickerDelegate {
func selectedItem(item: String)
}
Теперь создайте экземпляр этого протокола внутри MyClass
и реализовать внутри `ViewController``
class MyClass: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
let jobTypePickerValues = ["value1", "value2"]
var delegate: CustomPickerDelegate?
.. Other code and methods
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
delegate?. selectedItem(jobTypePickerValues[row])
}
}
Теперь установите делегата в viewDidLoad
и реализовать метод протокола.
class ViewController: UIViewController, CustomPickerDelegate {
override func viewDidLoad() {
super.viewDidLoad()
myClassSource = MyClass()
myClassSource.delegate = self
pickerView = UIPickerView()
pickerView.dataSource = myClassSource
pickerView.delegate = myClassSource
// set the input view of the job type to be a picker view
textInput.inputView = pickerView
textInput.text = jobTypePickerValues[0]
}
func selectedItem(item: String) {
textInput.text = item
}
}