неверный массив, отображаемый в UIPickerView - PullRequest
0 голосов
/ 13 апреля 2019

У меня есть два UIPickerview, которые появляются на одном ViewController. Я пытался следовать следующему учебнику .

Я последовал предложению в том, что я пометил каждое из полей UITextFields (у меня их 4). Смотрите изображение.

UIView of Storyboard

Ниже приведен код для UIPickerViews.

extension DriverViewController: UIPickerViewDelegate, UIPickerViewDataSource {
    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if pickerView.tag == 0 {
            return tracks.count
        } else {
            return drivers.count
        }
    }

    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if pickerView.tag == 0 {
            return "\(tracks[row])"
        } else {
            return "\(drivers[row])"
        }
    }

Проблема, с которой я сталкиваюсь, состоит в том, что массив track появляется во всех полях UIText.

Ниже приведен код для каждого из массивов и заголовок UIPickerView.

override func viewDidLoad() {
    super.viewDidLoad()
    tracks = ["Melbourne", "Manama", "Shanghai", "Baku",
              "Barcelona", "Monaco", "Montreal","Le Castellet","Spielberg",
              "Silverstone","Hockenheim","Budapest","Francorchamps","Monza","Singapore","Sochi","Suzuka","Austin","Interlagos","Abu Dhabi"]
    drivers = ["Lewis Hamilton","Antonio Giovinazzi","Kimi Raikkonen","Charles Leclerc","Sebastian Vettel","Romain Grosjean","Kevin Magnussen","Lando Norris",
               "Carlos Sainz","Valtteri Bottas","Sergio Perez","Lance Stroll","Pierre Gasly","Max Verstappen","Nico Hulkenberg","Daniel Ricciardo","Alexander Albon","Daniil Kvyat","Robert Kubica","George Russell"]
    createTrackPicker()
    createDriverPicker()
    createToolBar()
    // Do any additional setup after loading the view.
}

func createTrackPicker() {
    let trackPicker = UIPickerView()
    trackPicker.delegate = self
    TrackTextField.inputView = trackPicker
}

func createDriverPicker() {
    let driverPicker = UIPickerView()
    driverPicker.delegate = self
    firstTextField.inputView = driverPicker
    secondTextField.inputView = driverPicker
    thirdTextField.inputView = driverPicker
}

func createToolBar() {
    let toolBar = UIToolbar()
    toolBar.sizeToFit()
    let doneButton = UIBarButtonItem(title: "Done", style: .plain, target: self, action: #selector(ViewController.dismissKeyboard))
    toolBar.setItems([doneButton], animated: false)
    toolBar.isUserInteractionEnabled = true
    TrackTextField.inputAccessoryView = toolBar
    firstTextField.inputAccessoryView = toolBar
    secondTextField.inputAccessoryView = toolBar
    thirdTextField.inputAccessoryView = toolBar
}

@objc func dismissKeyboard() {
    view.endEditing(true)
}

1 Ответ

1 голос
/ 13 апреля 2019

Вы забыли тег.

func createDriverPicker() {
    let driverPicker = UIPickerView()
    driverPicker.tag = 1 // <—-
...