gpt4 book ai didi

ios - Swift 中的 UIPickerView 子类 : error optional value in viewForRow

转载 作者:可可西里 更新时间:2023-11-01 00:53:23 33 4
gpt4 key购买 nike

我想继承 UIPickerView 以创建自定义 DatePicker。我试过了,但是 Swift 中有一个错误说:

unexpectedly found nil while unwrapping an Optional value

在这一行:(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)")
}

谢谢

最佳答案

UIPickerView 中有一个已知错误(我认为是从 iOS 7 开始的),即 View 永远不会被重用。要解决您的问题,请去掉 if 子句(这样就不需要标签),

func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView!) -> UIView {
var view = UIView(frame: CGRectMake(0,0, 150,50))
let label = UILabel(frame:CGRectMake(0,0, 80, 40))
view.addSubview(label)
label.text = array[row]
return view
}

你得到错误的原因是因为你有两个不同的对象叫做“ View ”。您在 if 子句内创建的 View 在该子句外不可见,因此您在其上调用 viewWithTag 的“ View ”是传递给该方法的 View ,并且该 View 始终为 nil。

关于ios - Swift 中的 UIPickerView 子类 : error optional value in viewForRow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611712/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com