2017-06-27 1 views
0

J'ai les fonctions pertinentes pour afficher simplement les données dans mon sélecteur ici, le sélecteur est ajouté à la vue lorsque la fonction concernée est appelée, mais elle est vide. Ceci est ma classe:UIPickerView n'affiche pas les données Swift 3

class StatePickerView : UIPickerView, UIPickerViewDelegate, UIPickerViewDataSource { 

private let states = ["Illinois", "Arizona", "Indiana", "New York", "Oklahoma", "California", "Kentucky", "North Carolina", "Texas", "Massachisetts", "Ohio", "Wisonsin"] 

var statePickerDelegate: StatePickerDelegate? 

override init(frame: CGRect) { 
    super.init(frame: frame) 
    self.backgroundColor = .magenta 

} 


required init?(coder aDecoder: NSCoder) { 
    fatalError("init(coder:) has not been implemented") 
} 

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

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { 
    switch component { 
    case 0: 
     return states[row] 
    default: 
     return "row" 
    } 

} 

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

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

J'ai une méthode de protocole mais n'ajoute rien.

Je l'appelle dans un autre ViewController:

fileprivate let statePicker = StatePickerView() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.statePicker.statePickerDelegate = self 
} 

et puis quand clique sur un bouton, il est ajouté en tant que sous-vue:

func changeButtonTapped() { 
    self.changeButtonClicked = true 
    self.statePicker.statePickerDelegate = self 
    self.statePicker.reloadAllComponents() 

    self.view.addSubview(self.statePicker) 
    self.statePicker.snp.remakeConstraints { 
     $0.top.equalTo(self.currentStateView.snp.bottom) 
     $0.bottom.equalTo(self.view.snp.bottom) 
     $0.width.equalTo(self.view.snp.width) 
     $0.centerX.equalTo(self.view.snp.centerX) 
    } 
} 

J'ai passé au peigne fin et essayé pratiquement tous pertinents chose sur Stack Overflow déjà mais je suis perplexe. Ma fonction titleForRow n'est jamais touchée. Où est mon erreur?

Répondre

1

Correction: Au lieu de la classe héritant de UIPickerView, je l'ai changé en UIView. J'ai instancié une instance d'un UIPicker, puis ajouté le sélecteur à la vue sur l'instanciation de la classe.

Pour la délégation, je l'ai fait ce qui suit dans la méthode d'initialisation de remplacement:

self.pickerView.delegate = self 
    self.pickerView.dataSource = self