Я хотел бы подклассифицировать UIPickerView, чтобы создать пользовательскую DatePicker. Я попробовал это, но есть ошибка в Swift говоря:Подкласс UIPickerView в Swift: ошибка необязательное значение в viewForRow
неожиданно нашел ноль в то время как разворачивание необязательного значения
на этой линии: (view.viewWithTag(1) as UILabel).text = array[row]
Вот код:
class MyPickerView : UIPickerView, UIPickerViewDataSource, UIPickerViewDelegate{
let array = ["one", "two", "three"]
required init(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override init(frame: CGRect) {
super.init(frame:frame)
self.delegate = self
self.dataSource = self
}
//components/row
func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
return array.count
}
//view for row
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView {
if view == nil {
var view = UIView(frame: CGRectMake(0,0, 150,50))
let label = UILabel(frame:CGRectMake(0,0, 80, 40))
label.tag = 1
view.addSubview(label)
}
(view.viewWithTag(1) as UILabel).text = array[row]
return view
}
//did select row
func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
println("has selected row \(row)")
}
Thanks
Поблагодарите rdelmar, да, на самом деле это сработало, если var находится вне закрытия, но представление в параметре на самом деле всегда равно нулю, как вы сказали. Могу ли я спросить, почему 'return array [count]' in 'titleForRow ...' возвращает ошибку компилятора: '(Диапазон ) -> I.Distance не конвертируется в Int'? – Paul
@Paul, Это неправильный синтаксис. Вы хотите array.count. Кроме того, вы используете titleForRow? Вам не должно быть, когда вы реализуете viewForRow. – rdelmar
argh, я допустил ошибку, я хотел написать массив [row]. Да, спасибо за совет, который я пробовал один или другой, отлично, спасибо вам большое! – Paul