为什么 UIPickerView 显示空列表
Why UIPickerView shows empty list
我创建了两个 UIPickerView
并为每个来源声明。单击标签后,用户应该会看到所选 UIPickerView
的值
override func viewDidLoad() {
super.viewDidLoad()
print(monthBoolLabel)
monthPickerView.dataSource = self
monthPickerView.delegate = self
monthPickerView.isHidden = true
freeDayPickerView.dataSource = self
freeDayPickerView.delegate = self
freeDayPickerView.isHidden = true
let tapMonth = UITapGestureRecognizer(target: self, action: #selector(tapOnMonth(gestureReconizer:)))
monthLabel.addGestureRecognizer(tapMonth)
monthLabel.isUserInteractionEnabled = true
let tapFreeDay = UITapGestureRecognizer(target: self, action: #selector(tapOnFreeDay(gestureReconizer:)))
freedayLabel.addGestureRecognizer(tapFreeDay)
freedayLabel.isUserInteractionEnabled = true
let tapView = UITapGestureRecognizer(target: self, action: #selector(backgroundViewTapped))
view.addGestureRecognizer(tapView)
}
我声明了检测用户何时点击标签的函数:
@objc func tapOnMonth(gestureReconizer: UITapGestureRecognizer) {
print("*")
monthPickerView.isHidden = false
monthBoolLabel = true
freedayBoolLabel = false
}
@objc func tapOnFreeDay(gestureReconizer: UITapGestureRecognizer) {
print("*")
freeDayPickerView.isHidden = false
freedayBoolLabel = true
monthBoolLabel = false
}
我的 ViewController
也得到了扩展
extension HomePageViewController: UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if freedayBoolLabel == true {
return freeDaySource.count
}
else if monthBoolLabel == true{
return monthSource.count
}
else {
return 0
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if freedayBoolLabel == true {
freedayLabel.text = freeDaySource[row]
}
else if monthBoolLabel == true{
monthLabel.text = monthSource[row]
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if freedayBoolLabel == true {
return freeDaySource[row]
}
else if monthBoolLabel == true{
return monthSource[row]
}
else {
return ""
}
}
}
无论 UILabel
用户点击哪个,列表总是空的
您需要在点击标签后重新加载选择器视图。
@objc func tapOnMonth(gestureReconizer: UITapGestureRecognizer) {
print("*")
monthPickerView.isHidden = false
monthBoolLabel = true
freedayBoolLabel = false
monthPickerView.reloadAllComponents() // add this
}
对另一个也进行类似的更改。
仅供参考 - 您只需要一个选择器视图,而不是两个,因为无论如何您一次只显示一个。
我创建了两个 UIPickerView
并为每个来源声明。单击标签后,用户应该会看到所选 UIPickerView
override func viewDidLoad() {
super.viewDidLoad()
print(monthBoolLabel)
monthPickerView.dataSource = self
monthPickerView.delegate = self
monthPickerView.isHidden = true
freeDayPickerView.dataSource = self
freeDayPickerView.delegate = self
freeDayPickerView.isHidden = true
let tapMonth = UITapGestureRecognizer(target: self, action: #selector(tapOnMonth(gestureReconizer:)))
monthLabel.addGestureRecognizer(tapMonth)
monthLabel.isUserInteractionEnabled = true
let tapFreeDay = UITapGestureRecognizer(target: self, action: #selector(tapOnFreeDay(gestureReconizer:)))
freedayLabel.addGestureRecognizer(tapFreeDay)
freedayLabel.isUserInteractionEnabled = true
let tapView = UITapGestureRecognizer(target: self, action: #selector(backgroundViewTapped))
view.addGestureRecognizer(tapView)
}
我声明了检测用户何时点击标签的函数:
@objc func tapOnMonth(gestureReconizer: UITapGestureRecognizer) {
print("*")
monthPickerView.isHidden = false
monthBoolLabel = true
freedayBoolLabel = false
}
@objc func tapOnFreeDay(gestureReconizer: UITapGestureRecognizer) {
print("*")
freeDayPickerView.isHidden = false
freedayBoolLabel = true
monthBoolLabel = false
}
我的 ViewController
extension HomePageViewController: UIPickerViewDelegate, UIPickerViewDataSource {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
return 1
}
func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
if freedayBoolLabel == true {
return freeDaySource.count
}
else if monthBoolLabel == true{
return monthSource.count
}
else {
return 0
}
}
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
if freedayBoolLabel == true {
freedayLabel.text = freeDaySource[row]
}
else if monthBoolLabel == true{
monthLabel.text = monthSource[row]
}
}
func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
if freedayBoolLabel == true {
return freeDaySource[row]
}
else if monthBoolLabel == true{
return monthSource[row]
}
else {
return ""
}
}
}
无论 UILabel
用户点击哪个,列表总是空的
您需要在点击标签后重新加载选择器视图。
@objc func tapOnMonth(gestureReconizer: UITapGestureRecognizer) {
print("*")
monthPickerView.isHidden = false
monthBoolLabel = true
freedayBoolLabel = false
monthPickerView.reloadAllComponents() // add this
}
对另一个也进行类似的更改。
仅供参考 - 您只需要一个选择器视图,而不是两个,因为无论如何您一次只显示一个。