luidgi27
luidgi27

Reputation: 324

Swift PickerViews issue

I'm taking my first baby steps in Swift and I want to make a conversor app. I want to use 2 pickerviews, one for choose the origin type and the other to choose the destination type. The problem is that I can't make the 2 pickerviews work... What I want is click in one textfield and show the first pickerview and then click in other textfield and show the other pickerview but what is happening is that it always opening the first pickerview. Here's the code:

   import UIKit

    class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource,  UITextFieldDelegate {

@IBOutlet weak var txtOrigem: UITextField!

@IBOutlet weak var txtDestino: UITextField!

@IBOutlet weak var pickerpeso: UIPickerView! = UIPickerView()
@IBOutlet weak var pickerpeso2: UIPickerView! = UIPickerView()

var pesos = ["Escolher Opção","Gramas", "Quilogramas", "Toneladas", "Libras", "Onças"]
var pesos2 = ["ola","Gramas", "Quilogramas", "Toneladas", "Libras", "Onças"]

override func viewDidLoad() {
    super.viewDidLoad()


    pickerpeso.delegate = self
    pickerpeso2.delegate = self
    txtOrigem.delegate = self
    txtDestino.delegate = self

    pickerpeso.tag = 0
    pickerpeso2.tag = 1

    pickerpeso.hidden = true;
    pickerpeso2.hidden = true;
    txtOrigem.text = pesos[0] 
    txtDestino.text = pesos2[0] 

}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
    return 1
}

    func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {

    if pickerView.tag == 0 {
        return pesos.count 
    }
    else if pickerView.tag == 1 {
        return pesos2.count
    }
    return 1

}

func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {

    if pickerView.tag == 0 {
        return pesos[row] 
    }
    else if pickerView.tag == 1 {
        return pesos2[row]
    }
    return ""

}


func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    if pickerView.tag == 0 {
        txtOrigem.text = pesos[row]
    }
    else if pickerView.tag == 1 {
        txtDestino.text = pesos2[row]
    }
    pickerpeso.hidden = true
}

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    pickerpeso.hidden = false
    return false
}
}

Hope someone could help me. Sorry for my poor English. Thanks in advance!

Upvotes: 1

Views: 83

Answers (1)

dennis-tra
dennis-tra

Reputation: 1319

The problem is your textFieldShouldBeginEditing method. You are just setting the .hidden property for one of the pickerViews. Add tags to both of your textFields (like 2 and 3) and change the method to this:

func textFieldShouldBeginEditing(textField: UITextField) -> Bool {
    if textField.tag == 2 {
        pickerpeso.hidden = false
        pickerpeso2.hidden = true
    } else if textField.tag == 3 {
        pickerpeso.hidden = true
        pickerpeso2.hidden = false
    }
    return false
}

Dependent on which textField will get the focus one pickerView is hidden and the other one is visible.

Upvotes: 3

Related Questions