2015-11-21 2 views
1

Я беру свои первые детские шаги в Swift, и я хочу сделать приложение-конвертер. Я хочу использовать 2 pickerviews, один для выбора типа происхождения, а другой для выбора типа назначения. Проблема в том, что я не могу заставить работу 2 pickerviews ... Я хочу щелкнуть в одном текстовом поле и показать первый pickerview, а затем щелкнуть в другом текстовом поле и показать другой pickerview, но то, что происходит, это то, что он всегда открывается первый выбор. Вот код:Swift PickerViews issue

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

Надежда кто-то может мне помочь. Извините за моего бедного английского. Спасибо заранее!

ответ

3

Проблема заключается в вашем методе textFieldShouldBeginEditing. Вы просто устанавливаете свойство .hidden для одного из pickerView. Добавить теги к обоим из ваших TextFields (например, 2 и 3) и изменить метод к этому:

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 
} 

В зависимости от которой TextField получит фокус один pickerView скрыта, а другая видна.

+1

Это работает! Просто нужно переключить выбор, спасибо вам большое! – luidgi27