0

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")
}

ピッカーを表示しているView Controllerには、次のものがあります

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

1 に答える 1

0

カスタム デリゲートを 1 つ作成し、 ViewControllerpickerView を作成する場所に実装する必要があります。

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
      }
}
于 2016-09-08T12:51:08.137 に答える