Home > Enterprise >  UIPickerView row text is hidden
UIPickerView row text is hidden

Time:10-16

I believe I have followed the steps to implement a UIPickerView to display an array of strings. For some reason, the text from titleForRow is hidden. I seems like the picker view is getting the array count because I have the ability to scroll. I just can't get the list if names. I am using UIStoryboard and all outlets are connected. Any help would be appreciated.

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
          
          }
     }

Screenshot of bug

CodePudding user response:

I don't think there is a problem with the code you've posted. I put it into a playground with a little bit of setup code and it works. You should check your outlets in the nib file and check at runtime to ensure that the pickerView property is being assigned. As suggested in comments, check the dimensions of the picker using the view debugging tools

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

Here's the Playground I was working with:

import UIKit import 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
  • Related