2 TextField с 2 сборщиками в 1 UIView - PullRequest
0 голосов
/ 05 февраля 2020

Я сделал 2 textField с 2 средствами выбора в 1UIView, но я не могу показать правильные средства выбора в правом текстовом поле, потому что я не знаю, как распознать текущий вид, активный. Я пробовал что-то с тегом (но работать только со средствами выбора, а не с текстовым полем) и создать 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]
        }
    }

Кто-то как идея?

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

вот полный код

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]
        }
    }
0 голосов
/ 05 февраля 2020

Сначала назначьте оба делегата TextField для себя в viewDidLoad

GenderTextField.delegate = self
WitchSportTextField.delegate = self

Используйте это расширение для определения, какой TextField активен.

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

ПРИМЕЧАНИЕ : Имена переменных должны начинаться со строчной буквы Используйте описательные имена, чтобы уточнить свои намерения:

Посмотрите на это: https://github.com/MLSDev/development-standards/blob/master/platform/ios/swift-coding-conventions.md

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...