У меня есть файл Swift, содержащий четыре отдельных массива кортежей.В ViewControllerA у меня есть четыре разные кнопки, каждая из которых меняет значение «selectedPosition» и настроена на запуск «SegueAtoB».Затем «selectedPosition» следует использовать в ViewControllerB для выбора подходящего массива для заполнения UIPickerView в ViewControllerB.
В настоящее время метод подготовки к segue передает правильные данные только при правильных данных при втором нажатии кнопки, например, когдаприложение загружается в ViewControllerA. Я нажимаю кнопку, она переводит меня в ViewControllerB, но массив, выбранный для UIPickerView, используется по умолчанию. Когда я возвращаюсь назад в ViewControllerA и нажимаю кнопку, код работает так, как должен.
ViewControllerA:
class ViewControllerA: UIViewController {
// Variable to hold position selected (passed through to ViewControllerB)
var selectedPosition : String = ""
// Button1
// Set up to run "SegueAtoB"
@IBOutlet weak var selectButton_CEO: UIButton!
@IBAction func selectButton_CEO_Tapped(_ sender: UIButton) {
selectedPosition = "CEO"
}
// MARK: - Navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "SegueAtoB" {
let VC : ViewControllerB = segue.destination as! ViewControllerB
VC.ReceivePlayerDataDelegate = self
VC.currentPosition = selectedPosition
}
}
}
ViewControllerB:
class ViewControllerB: UIViewController, UIPickerViewDataSource, UIPickerViewDelegate {
// set the position passed through from ViewControllerB
var currentPosition : String = ""
// set the playersArray by position
var posArray = ceoArray
// Button to dismiss ViewControllerB
@IBAction func closeButton(_ sender: UIButton) {
dismiss(animated: true, completion: nil)
}
// Picker view
@IBOutlet weak var posPickerView: UIPickerView!
override func viewDidLoad() {
super.viewDidLoad()
// select appropriate array based on position selected
selectArray(currentPos: currentPosition)
// Delegate picker view to self
posPickerView.delegate = self
posPickerView.dataSource = self
}
// UIPickerViewMethods
// Set the number of picker columns to 1
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
// Set the number of picker rows to the number of items in posArray
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return posArray
}
// Set the title of each picker row to each name in posArray
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return posArray[row].name
}
// Picker action
// What happens when selection is made
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
print(posArray[row])
// I've removed what's in here as it's not relevant to the question
}
// Method to select correct array based on currentPosition -- called in viewDidLoad
func selectArray(currentPos: String) {
switch (currentPos) {
case "CEO" :
posArray = ceoArray
case "CFO" :
posArray = cfoArray
default :
posArray = ceoArray
}
}
}
Мне нужно обновить UIPickerView до соответствующего массива при первом переходе от ViewControllerA к ViewControllerB, не прибегая кпо умолчанию при первом переходе.