【问题标题】:UIPickerView row text is hiddenUIPickerView 行文本被隐藏
【发布时间】:2021-12-03 09:19:07
【问题描述】:

我相信我已按照步骤实现 UIPickerView 以显示字符串数组。由于某种原因,titleForRow 中的文本被隐藏了。我似乎选择器视图正在获取数组计数,因为我能够滚动。如果名称,我只是无法获得列表。我正在使用 UIStoryboard 并且所有插座都已连接。任何帮助将不胜感激。

extension SongPlayerViewController: UIPickerViewDataSource, UIPickerViewDelegate {
func numberOfComponents(in pickerView: UIPickerView) -> Int {
    return 1
}

func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
    return hertzArray.count
}

func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
    return hertzArray[row]
}

//when user selects row
func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        
    }
 }
  class SongPlayerViewController: UIViewController {
     
         let hertzArray = ["432Hz", "528Hz", "174Hz", "396Hz", "417Hz", "639Hz", "741Hz", "852Hz"]

         @IBOutlet weak var pickerView: UIPickerView!
         @IBOutlet weak var toolBar: UIToolbar!

          //when view did load
          override func viewDidLoad() {
          super.viewDidLoad()

              pickerView.dataSource = self
              pickerView.delegate = self
          
          }
     }

【问题讨论】:

  • pickerView.reloadAllComponents() in viewDidAppear 我想也许它会起作用?或检查您的数据源和委托连接到 viewController
  • pickerView 的高度是多少?

标签: swift uipickerview


【解决方案1】:

我认为您发布的代码没有问题。我用一点设置代码把它放到一个操场上,它就可以工作了。您应该检查 nib 文件中的 outlet 并在运行时检查以确保分配了 pickerView 属性。按照 cmets 中的建议,使用视图调试工具检查选取器的尺寸

(https://developer.apple.com/library/archive/documentation/ToolsLanguages/Conceptual/Xcode_Overview/ExaminingtheViewHierarchy.html)

这是我正在使用的游乐场:

导入 UIKit 导入 PlaygroundSupport

class SongPlayerViewController: UIViewController {
    let hertzArray = ["432Hz", "528Hz", "174Hz", "396Hz", "417Hz", "639Hz", "741Hz", "852Hz"]

    @IBOutlet weak var pickerView: UIPickerView!

    override func loadView() {
        let pickerView = UIPickerView()
        self.pickerView = pickerView

        view = UIView(frame: CGRect(x: 0, y: 0, width: 320, height: 480))
        view.addSubview(pickerView)

        pickerView.translatesAutoresizingMaskIntoConstraints = false
    }

    override func viewDidLoad() {
        super.viewDidLoad()

        pickerView.dataSource = self
        pickerView.delegate = self
    }
}


extension SongPlayerViewController: UIPickerViewDataSource, UIPickerViewDelegate {
    func numberOfComponents(in pickerView: UIPickerView) -> Int {
        return 1
    }

    func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
        return hertzArray.count
    }

    func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
        return hertzArray[row]
    }

    func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
    }
}

let songController = SongPlayerViewController()
PlaygroundSupport.PlaygroundPage.current.liveView = songController

【讨论】:

  • 感谢您的回答。昨晚发布后,我今天早上测试了我的代码。它在不改变任何东西后起作用。如果这个问题仍然存在,我将使用 View Hierarchy Debugger。
猜你喜欢
  • 1970-01-01
  • 2021-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-22
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多