PickerView
をtableViewCell
の内部に作成しようとしています。カスタムセルをUIPickerViewDelegate
とUIPickerViewDataSource
プロトコルに準拠させました。私はコントローラからセルにデータ配列を送信します(これはMVCパターンに準拠しないと思います、それを修正する方法を私に提案することもできますか?)。しかし、tableviewがdequeueReusableCellWithIdentifier
を呼び出すとき、セルはpickerView関数を呼び出します。ただし、pickerView関数は、まだ初期化されていないpickerDataを使用します。どうすれば修正できますか?以下はカスタムtableViewCell内でUiPickerViewを初期化する方法は?
セルのための私のコードです:
class PickerTableViewCell: UITableViewCell, UIPickerViewDelegate, UIPickerViewDataSource {
@IBOutlet weak var picker: UIPickerView!
@IBOutlet weak var title: UILabel!
var pickerData: Array<String>!
override func awakeFromNib() {
self.picker.delegate = self;
self.picker.dataSource = self;
super.awakeFromNib()
}
override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)
// Configure the view for the selected state
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return pickerData.count // I get fatal error here due to pickerData is nil
}
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
return pickerData[row]
}
}
そしてここでは、細胞の初期化のためのコードです:任意の助け
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("picker", forIndexPath: indexPath) as! PickerTableViewCell
cell.title.text = fieldModel.editFieldArray[indexPath.row].title
cell.pickerData = (fieldModel.editFieldArray[indexPath.row] as! PickerEditField).pickerData
return cell
}
おかげでたくさん!
はあなたpickerDataが変数オプション作ってみました持って初期化し、それをチェックして、あなたのcellForRowAtIndexPath内でそれを設定し、最後にコンポーネントをリロード? – ohr