xcode11 как присвоить выбранному параметру действие в окне выбора. Чтобы при выборе параметра в выбранном массиве я мог выполнить с ним действие

#ios #arrays #swift #xcode #uipickerview

#iOS #массивы #swift #xcode #просмотр uipickerview #uipickerview

Вопрос:

Например, я выбираю в окне выбора (страна: Шотландия, город: Абердин ) после того, как я выбрал оба параметра в окне выбора, я бы выбрал кнопку, и это действие перенесло меня на другую страницу с информацией о Шотландии, в частности, об Абердине.

То, что я пытаюсь сделать, это чтобы мои параметры выбора переводили меня на другую страницу, содержащую данные, специфичные для выбранных параметров. Это то, что я закодировал до сих пор.

 import UIKit

class GrapplingViewController: UIViewController {

    @IBOutlet weak var trainingTextField: UITextField!
    @IBOutlet weak var areaTextField: UITextField!
    @IBOutlet weak var focusTextField: UITextField!
    
            
   
    
    let training = ["Skill Reciting", "Sparring"]
            let area = ["Takedowns", "Top Battle", "Bottom Battle", "Survival"]
            let focus = ["Full Training", "Specific Training"]
    
           
            
            var trainingPickerView = UIPickerView ()
            var areaPickerView = UIPickerView ()
            var focusPickerView = UIPickerView()
            
            
            
   override func viewDidLoad() {
          super.viewDidLoad()
          

          title = "Grappling"
      
                
                
                trainingTextField.inputView = trainingPickerView
                areaTextField.inputView = areaPickerView
                focusTextField.inputView = focusPickerView
                
                
    
                trainingTextField.placeholder = "Select training type"
                areaTextField.placeholder = "Select start position"
                focusTextField.placeholder = "Select your focus"
    
                
                
                trainingTextField.textAlignment = .center
                areaTextField.textAlignment = .center
                focusTextField.textAlignment = .center
    
              
                
    
                trainingPickerView.delegate = self
                trainingPickerView.dataSource = self
            areaPickerView.delegate = self
            areaPickerView.dataSource = self
                focusPickerView.delegate = self
            focusPickerView.dataSource = self
                
                
                
                trainingPickerView.tag = 1
                areaPickerView.tag = 2
                focusPickerView.tag = 3
          
               
    }
            }
            
        

        extension GrapplingViewController: UIPickerViewDataSource, UIPickerViewDelegate {
            
            func numberOfComponents(in pickerView: UIPickerView) -> Int {
                return 1
            }
            
            func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
                switch pickerView.tag {
                case 1:
                    return training.count
                    case 2:
                        return area.count
                case 3:
                    return focus.count
                default:
                    return 1
                }
            }
            
           
            
            func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
                switch pickerView.tag {
                case 1:
                    return training[row]
                case 2:
                        return area[row]
                case 3:
                    return focus[row]
                default:
                    return "Data not found"
            }
            }
            
            
            
            func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
                
                switch pickerView.tag {
                    case 1:
                        trainingTextField.text = training[row]
                        trainingTextField.resignFirstResponder()
                    case 2:
                           areaTextField.text = area[row]
                            areaTextField.resignFirstResponder()
                    case 3:
                        focusTextField.text = focus[row]
                        focusTextField.resignFirstResponder()
                    default:
                        return
                }
            }
    

         @IBAction func startButton(_ sender: UIButton) {
              
               

}


}
  

Ответ №1:

Предполагая, что вы хотите перейти к следующему контроллеру просмотра только после того, как все три параметра будут выбраны в окне выбора, вы можете попробовать это.

Каждый раз, когда ваш didSelectRow метод, сохраняйте выбранную опцию. Например: у меня было бы три свойства, по одному для selectedTraining , selectedArea и selectedFocus .

Каждый раз, когда didSelectRow вызывается, в операторе case проверяйте, имеют ли две другие переменные значение. Если да, то, предполагая, что GrapplingViewController подключен к другому ViewContoller, вы можете вызвать performSegue метод.