简体   繁体   中英

2 TextField with 2 picker in 1 UIView

I made a 2 textField with 2 pickers in 1UIView but I can't show the right pickers in the right textfield because I don't know how recognize the current view active. I tried something with tag (but only work with pickers, no with textfield), and create var current = UITextField()

var genre = ["-","Homme","Femme"]
var Sport = ["-","Tennis"]
var picker = UIPickerView()
var currentTextField = UITextField()

override func viewDidLoad() {
        super.viewDidLoad()

 picker.delegate = self
    picker.dataSource = self
    GenderTextField.inputView = picker
    WitchSportTextField.inputView = picker
func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if currentTextField == GenderTextField{
        return genre.count
        }else{
            return Sport.count
        }
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if currentTextField == GenderTextField {
            GenderTextField.text = genre[row]
        }else{
            WitchSportTextField.text = Sport[row]
        }
    }
    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if currentTextField == GenderTextField{
        return genre[row]
         }else{
            return Sport[row]
        }
    }

Someone as an idea ?

Firstly assign your both TextField delegate to self in viewDidLoad

GenderTextField.delegate = self
WitchSportTextField.delegate = self

Use this extension for identified which TextField is active.

extension YourClass: UITextFieldDelegate {
    func textFieldDidBeginEditing(_ textField: UITextField) {
         currentTextField = textField
         picker.reloadAllComponents() //Reload for accurate data
    }
}

NOTE: Variable names should begin with lower case letter. Use descriptive names to clarify your intent:

Look at this: https://github.com/MLSDev/development-standards/blob/master/platform/ios/swift-coding-conventions.md

here is the complete code

var genre = ["-","Homme","Femme"]
var Sport = ["-","Tennis"]
var genrepicker = UIPickerView()
var Sportpicker = UIPickerView()
var genretTextField = UITextField()
var SportTextField = UITextField()

override func viewDidLoad() {
        super.viewDidLoad()

    genrepicker.delegate = self
    genrepicker.dataSource = self

    Sportpicker.delegate = self
    Sportpicker.dataSource = self
    genretTextField.inputView = genrepicker
    SportTextField.inputView = Sportpicker

func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if pickerView == genrepicker{
        return genre.count
        }else{
            return Sport.count
        }
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if pickerView == genrepicker {
            GenderTextField.text = genre[row]
        }else{
            WitchSportTextField.text = Sport[row]
        }
    }
   func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if pickerView == genrepicker{
        return genre[row]
         }else{
            return Sport[row]
        }
    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM