Почему UIPickerView показывает пустой список

#ios #swift #uipickerview

#iOS #swift #uipickerview

Вопрос:

Я создал два UIPickerView и объявил для каждого источника. После нажатия на ярлык пользователь должен увидеть значения для выбранных UIPickerView

 override func viewDidLoad() {
        super.viewDidLoad()
        print(monthBoolLabel)
        monthPickerView.dataSource = self
        monthPickerView.delegate = self
        monthPickerView.isHidden = true

        freeDayPickerView.dataSource = self
        freeDayPickerView.delegate = self
        freeDayPickerView.isHidden = true

        let tapMonth = UITapGestureRecognizer(target: self, action: #selector(tapOnMonth(gestureReconizer:)))
        monthLabel.addGestureRecognizer(tapMonth)
        monthLabel.isUserInteractionEnabled = true

        let tapFreeDay = UITapGestureRecognizer(target: self, action: #selector(tapOnFreeDay(gestureReconizer:)))
        freedayLabel.addGestureRecognizer(tapFreeDay)
        freedayLabel.isUserInteractionEnabled = true


        let tapView = UITapGestureRecognizer(target: self, action: #selector(backgroundViewTapped))
        view.addGestureRecognizer(tapView)
}
  

Я объявил функцию, которая обнаруживает, когда пользователь нажимает на ярлык:

 @objc func tapOnMonth(gestureReconizer: UITapGestureRecognizer) {
        print("*")
        monthPickerView.isHidden = false
        monthBoolLabel = true
        freedayBoolLabel = false

    }

    @objc func tapOnFreeDay(gestureReconizer: UITapGestureRecognizer) {
        print("*")
        freeDayPickerView.isHidden = false
        freedayBoolLabel = true
        monthBoolLabel = false
    }
  

Я также получил расширение моего ViewController

 extension HomePageViewController: UIPickerViewDelegate, UIPickerViewDataSource {

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        if freedayBoolLabel == true {
            return freeDaySource.count
        }
        else if monthBoolLabel == true{
            return monthSource.count
        }
        else {
            return 0
        }
    }


    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if freedayBoolLabel == true {
            freedayLabel.text = freeDaySource[row]
        }
        else if monthBoolLabel == true{
            monthLabel.text = monthSource[row]
        }

    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        if freedayBoolLabel == true {
            return freeDaySource[row]
        }
        else if monthBoolLabel == true{
            return monthSource[row]
        }
        else {
            return ""
        }
    }

}
  

Независимо от того, какой UILabel пользователь нажимает, списки всегда пусты

Ответ №1:

Вам необходимо перезагрузить представление выбора после нажатия на ярлык.

 @objc func tapOnMonth(gestureReconizer: UITapGestureRecognizer) {
    print("*")
    monthPickerView.isHidden = false
    monthBoolLabel = true
    freedayBoolLabel = false
    monthPickerView.reloadAllComponents() // add this
}
  

Внесите аналогичные изменения и в другой.

К вашему сведению — вам нужен только один вид выбора, а не два, поскольку вы все равно показываете только по одному за раз.

Комментарии:

1. Большое вам спасибо, я изменю его

2.У меня есть еще один вопрос, если я хотел бы иметь то же ViewController UIDatePicker самое и UIPickerView возможно ли это сделать?

3. Я уже добавил, но не могли бы вы сказать мне, нужно ли мне добавить еще один вид выбора в мой ViewController ?

4. Добавьте все необходимые элементы управления. Если вам нужна помощь с другой проблемой, не стесняйтесь публиковать вопрос, относящийся к вашей новой проблеме. Обязательно укажите все необходимые сведения о том, что вы пробовали и какая помощь вам нужна.

5. Хорошо, спасибо еще раз