Как я могу изменить выбор в окне выбора, основываясь на другом списке выбора? - PullRequest
0 голосов
/ 14 февраля 2020

Изображение текущей версии В настоящее время у меня два режима выбора. Один - сборщик страны (США и Канада), а другой - сборщик штата. Мне бы хотелось, чтобы при выборе США отображались штаты США, а при выборе Канады - канадские провинции. Вот образец того, что у меня есть до сих пор. Помощь будет очень ценится!

Редактировать: Все еще не найдено никаких рабочих решений, любая помощь будет оценена!

let countries = ["",
"USA",
"Canada",
]
let states = ["Alaska",
"Alabama",
"Arkansas"]
 let provinces = ["Alberta",
"British Columbia",
"Manitoba",
"New Brunswick"]

//Sets picker view
let pickerView = UIPickerView()
//Holds current data in array
var currentArray: [String] = []
//Holds current text field
var activeTextField : UITextField!
var activeField: UITextField?

 fileprivate func delegates() {
  countryTextView.delegate = self
  stateTextView.delegate = self
}

fileprivate func pickerViewDelegates() {
    //Enables pickerview
    pickerView.delegate = self
    pickerView.dataSource = self
}
//Sets pickerview input
fileprivate func pickerViewSet() {
    countryTextView.inputView = pickerView
    stateTextView.inputView = pickerView
}
//Closes keyboard when done button is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}
//Textfield delegate
func textFieldShouldBeginEditing(_ textField: UITextField) -> Bool {
    activeTextField = textField

    switch textField {
    case countryTextView:
        currentArray = countries
    case stateTextView:
        currentArray = states
    default:
        print("Default")
    }
    pickerView.reloadAllComponents()
    return true
}
//Number of rows in picker view
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
//One element of array per row
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return currentArray.count
}
//Puts the array element of whichever picker view is chosen into picker view
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
    return currentArray[row]
}
//Selects the array element in the row thats chosen
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    print("Selected item is", currentArray[row])
    activeTextField.text = currentArray[row]
}

1 Ответ

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

Я не говорю, что мой код "хороший". Это просто работает так, как вы хотите (насколько я вас понял)

, если вы перейдете из Blubb в США, второй сборщик обновится.

class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {


let countries = ["Blubb",
                 "USA",
                 "Canada",
]
let states = ["Alaska",
              "Alabama",
              "Arkansas"]

let statesCan = ["1", "2"]

//Sets picker view
let pickerView = UIPickerView()
let pickerView2 = UIPickerView()
//Holds current data in array
var currentArray: [String] = []
//Holds current text field
var activeTextField : UITextField!
var activeField: UITextField?

fileprivate func delegates() {
//        countryTextView.delegate = self
//        stateTextView.delegate = self
}

fileprivate func pickerViewDelegates() {
    //Enables pickerview
    pickerView.delegate = self
    pickerView.dataSource = self

    pickerView2.delegate = self
    pickerView2.dataSource = self
}
//Sets pickerview input
fileprivate func pickerViewSet() {
//        countryTextView.inputView = pickerView
 //        stateTextView.inputView = pickerView
}
//Closes keyboard when done button is pressed
func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}

//Number of rows in picker view
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}
//One element of array per row
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    if pickerView == self.pickerView2 {
        return currentArray.count
    } else {
        return countries.count
    }
}
//Puts the array element of whichever picker view is chosen into picker view
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String?{
    if pickerView == self.pickerView2 {
        return currentArray[row]
    } else {
        return countries[row]
    }
}
//Selects the array element in the row thats chosen
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    if pickerView == self.pickerView {
        if row == 0 {
            currentArray = states
        } else {
            currentArray = statesCan
        }
        pickerView2.reloadAllComponents()
    }
//     activeTextField.text = currentArray[row]
}

override func viewDidLoad() {
    super.viewDidLoad()

    currentArray = states

    pickerViewDelegates()
    self.view.addSubview(pickerView)
    self.view.addSubview(pickerView2)

    pickerView2.frame.origin.y = 400

    }


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