UIPickerView 重用视图始终为零
UIPickerView reusing view is always nil
根据 Apples API 引用在此方法中重用视图
optional func pickerView(_ pickerView: UIPickerView,
viewForRow row: Int,
forComponent component: Int,
reusing view: UIView?) -> UIView
是选择器视图的缓存视图但是当我尝试将它用于下一行时它总是 nil 而我返回 UILabel
当重用视图为 nil 时。问题是什么?
这是我的实现:
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let pickerLabel = UILabel()
pickerLabel.textColor = UIColor.black
pickerLabel.text = "10"
pickerLabel.textAlignment = NSTextAlignment.center
pickerLabel.sizeToFit()
return pickerLabel
}
您的代码未尝试使用重用视图。您的代码应该是这样的:
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
var pickerLabel : UILabel
if let label = view as? UILabel {
pickerLabel = label
} else {
pickerLabel = UILabel()
pickerLabel.textColor = UIColor.black
pickerLabel.textAlignment = NSTextAlignment.center
}
pickerLabel.text = "10"
pickerLabel.sizeToFit()
return pickerLabel
}
如果重用视图是标签,则此代码会重用标签。否则它会创建并设置一个新标签。
请注意,当滚动选择器视图时,选择器只会传入重用视图。它类似于 table 视图的单元格重用。
根据 Apples API 引用在此方法中重用视图
optional func pickerView(_ pickerView: UIPickerView,
viewForRow row: Int,
forComponent component: Int,
reusing view: UIView?) -> UIView
是选择器视图的缓存视图但是当我尝试将它用于下一行时它总是 nil 而我返回 UILabel
当重用视图为 nil 时。问题是什么?
这是我的实现:
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let pickerLabel = UILabel()
pickerLabel.textColor = UIColor.black
pickerLabel.text = "10"
pickerLabel.textAlignment = NSTextAlignment.center
pickerLabel.sizeToFit()
return pickerLabel
}
您的代码未尝试使用重用视图。您的代码应该是这样的:
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
var pickerLabel : UILabel
if let label = view as? UILabel {
pickerLabel = label
} else {
pickerLabel = UILabel()
pickerLabel.textColor = UIColor.black
pickerLabel.textAlignment = NSTextAlignment.center
}
pickerLabel.text = "10"
pickerLabel.sizeToFit()
return pickerLabel
}
如果重用视图是标签,则此代码会重用标签。否则它会创建并设置一个新标签。
请注意,当滚动选择器视图时,选择器只会传入重用视图。它类似于 table 视图的单元格重用。