2017-06-27 56 views
0

我有相關的功能來在這裏顯示我的選擇器中的數據,當相關函數被調用時,選擇器被添加到視圖中,但它是空白的。這是我的課程:UIPickerView不顯示數據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) { 
} 

我有一個協議方法,但它沒有添加任何東西。

我把它在不同的視圖控制器:

fileprivate let statePicker = StatePickerView() 

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

,並點擊一個按鈕,然後時,它被添加作爲一個子視圖:

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) 
    } 
} 

我已經通過梳理,幾乎想盡一切有關已經堆棧溢出的事情,但我很難過。我的titleForRow函數甚至沒有被擊中。我的錯誤在哪裏?

回答

1

修正︰ 而不是從UIPickerView繼承的類,我將其更改爲UIView。我實例化了一個UIPicker的實例,然後將該選擇器添加到實例化該類的視圖中。

對於代表團,我做在覆蓋init方法如下:

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