Reputation: 19964
I've found some similar questions to this but none of the solutions matched my situation, and most were in objective-c which I don't know.
I'm trying to create a timer with minutes and seconds but I can't figure out how to wire up my second component.
How do I set up a second component with a UIPickerView?
This is what I have so far:
TimeViewController.swift
class TimeViewController: UIViewController, UIPickerViewDelegate {
@IBOutlet weak var timeSegueLabel: UILabel!
let minutes = Array(0...9)
let seconds = Array(0...59)
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return minutes.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return String(minutes[row])
}
override func viewDidLoad() {
super.viewDidLoad()
}
}
Upvotes: 11
Views: 13045
Reputation: 109
Can do Picker with 2 components displaying in two labels
swift 4 xcode 9
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var lbl1: UILabel!
@IBOutlet weak var lbl2: UILabel!
@IBOutlet weak var picker1: UIPickerView!
var country = ["UK","US","JAPAN","UAE","CHINA","CANADA","EUROPE","IRAN","INDIA","ITALY" ]
var capital = [ "LONDON","WASHIGTON DC","TOKYO","ABU DHABI","BEIJING","OTTAWA","BRUSSELS","TEHRAN","NEW DELHI","ROME" ]
var val = 0
override func viewDidLoad() {
super.viewDidLoad()
}
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if component == 0 {
return country.count
} else {
return capital.count
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if component == 0 {
return String(country[row])
} else {
return String(capital[row])
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if component == 0 {
lbl1.text = country[row]
} else {
lbl2.text = capital[row]
}
}
}
Upvotes: 0
Reputation: 19964
Thanks to @Bluehound for pointing me in the right direction. I had to look at some objective-c on GitHub to find out exactly how to do it, this is the answer I was looking for:
TimeViewController:
class TimeViewController: UIViewController, UIPickerViewDelegate {
@IBOutlet weak var timeSegueLabel: UILabel!
let minutes = Array(0...9)
let seconds = Array(0...59)
var recievedString: String = ""
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 2
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
//row = [repeatPickerView selectedRowInComponent:0];
var row = pickerView.selectedRowInComponent(0)
println("this is the pickerView\(row)")
if component == 0 {
return minutes.count
}
else {
return seconds.count
}
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
if component == 0 {
return String(minutes[row])
} else {
return String(seconds[row])
}
}
override func viewDidLoad() {
super.viewDidLoad()
timeSegueLabel.text = recievedString
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
This is the result:
Upvotes: 24