Я пытаюсь создать PickerView
внутри tableViewCell
. Я сделал свои пользовательские сотовые протоколы UIPickerViewDelegate
и UIPickerViewDataSource
. Я посылаю массив данных в ячейку от контроллера (я думаю, что это не соответствует шаблону MVC, может быть, вы также можете предложить мне, как это исправить?). Но когда tableview вызывает dequeueReusableCellWithIdentifier
, ячейка вызывает функцию pickerView. Однако функция pickerView использует pickerData, который еще не инициализирован. Как это исправить?Как инициализировать UiPickerView внутри пользовательского tableViewCell?
Ниже приведен код для ячейки:
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