japes Sophey
japes Sophey

Reputation: 495

Swift - View controller with several UIPickers.

I'm using swift 2.0 (I'm also new to Swift, and iOS development) ...

I'd like to have a view controller that has two UIPickers. Can anyone advise how this can be done?

My View controller class ...

import UIKit

class CreateSessionViewController : UIViewController, UIPickerViewDataSource,UIPickerViewDelegate {

//Outlets:
@IBOutlet var durationPicker: UIPickerView!
@IBOutlet var typePicker: UIPickerView!

//Dummy duration array:
var durationArray = ["10", "20", "30", "40", "50", "60"];

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    self.durationPicker.dataSource = self;
    self.durationPicker.delegate = self;

}

//Picker view methods:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return durationArray.count
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return durationArray[row]
}

}

Now, durationPicker is working great, but how would I populate typePicker?

Upvotes: 0

Views: 54

Answers (2)

Roberto Frontado
Roberto Frontado

Reputation: 438

You need to filter in the delegate method like this

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    if durationPicker == pickerView {
        return 1 // The amount that you need for the durationPicker
    } else if typePicker == pickerView {
        return 2 // The amount that you need for the typePicker
    }

}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if durationPicker == pickerView {
        return durationArray.count 
    } else if typePicker == pickerView {
        return typeArray.count
    }
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    if durationPicker == pickerView {
        return durationArray[row]
    } else if typePicker == pickerView {
        return typeArray[row]
    }
}

Hope this help you!

Upvotes: 1

Sergei Stralenia
Sergei Stralenia

Reputation: 865

You should use pickerView object passed to every delegate's method:

//Picker view methods:
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
  if pickerView == durationPicker {
    return 1
  } else if pickerView == typePicker {
    return 2
  }

  return 0
}

func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
  if pickerView == durationPicker {
    return durationArray.count
  } else if pickerView == typePicker {
    return typeArray.count
  }

  return 0
}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
  if pickerView == durationPicker {
    return durationArray[row]
  } else if pickerView == typePicker {
    return typeArray[row]
  }

  return nil
}

Upvotes: 2

Related Questions