Swift 4.2 - PickerView не показывает контент

этот код меня очень злит. Я уже прочитал тысячи руководств и комментариев о переполнении стека ....

Пожалуйста помогите. Средство выбора просто содержит пустой серый экран.

Код здесь:

GenderPickerModel.swift

    import UIKit

class GenderPickerModel:  NSObject, UIPickerViewDataSource, UIPickerViewDelegate {

    let genderPickerData: [String] = ["male", "female"]

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return genderPickerData.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return genderPickerData[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    } 
}

и используется в контроллере:

@IBOutlet weak var gender: UITextField!  
private var genderPickerView: UIPickerView?

override func viewDidLoad() {
        super.viewDidLoad()
        loadProfile()
        prepareView()
    }

    func prepareView() {
        genderPickerView = UIPickerView.init()

        let gpModel = GenderPickerModel()

        genderPickerView?.delegate = gpModel
        genderPickerView?.dataSource = gpModel
        gender.inputView = genderPickerView;
        genderPickerView?.selectRow(0, inComponent: 0, animated: true)
        genderPickerView?.reloadAllComponents()
    }

Почему вы создаете экземпляр GenderPickerModel и назначаете его источнику данных и делегату. Можете ли вы сказать мне весь этот код в одном контроллере или нет?

Abhishek Jadhav 27.12.2018 11:24

Бьюсь об заклад, что если вы поместите точки останова внутри модели, она не остановится на этом, что означает, что делегаты не работают

ironRoei 27.12.2018 11:28

@AbhishekJadhav, потому что этот контроллер содержит 5 PickerViews. Я хотел отделить их от класса контроллера

Milhouse83 27.12.2018 11:33

@ironRoei а почему? В чем разница в наличии отдельного класса для данных и включении кода внутри вызывающего контроллера?

Milhouse83 27.12.2018 11:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
720
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Во-первых, вам не нужно создавать отдельный массив пола в классе pickerview, и вам не нужно создавать экземпляр pickerview.

Отсюда вы можете увидеть свой источник данных в своем custompickerview.

/**
Controller code where you can create instantiate picker assign data 

*/
    class ViewController: UIViewController {

        @IBOutlet weak var textField: UITextField!            
        let genderPickerData : [String] = ["male", "female"]

        override func viewDidLoad() {
            super.viewDidLoad()

            prepareView()
        }

        func prepareView() {

            genderPickerView = UIPickerView()

            let gpModel = GenderPickerModel()

            gpModel.data = genderPickerData

            gpModel.dataSource = gpModel
            gpModel.delegate = gpModel
            textField.inputView = gpModel

        }
    }

/**

Custom pickerview class where you can handle data 

*/
import UIKit

class GenderPickerModel: UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate {

    var data = [String]()

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

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return data.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return data[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    }

}

Спасибо, но контент все еще пуст! :(

Milhouse83 27.12.2018 12:20

Я пробовал этот код, он работает, показывая источник данных в pickerview, потому что я упоминаю, что вам нужно создать собственный класс pickerview и реализовать?

Abhishek Jadhav 27.12.2018 12:23

Другие вопросы по теме