Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programmatically Create and Show UIPickerView

I am attempting to create a UIPickerView programmatically and display it as the firstResponder of a textfield, however, the picker view is not showing up. textField is connected to an object in the interface builder, but pickerView is being created programatically.

class View: UIViewController {
    @IBOutlet var picker : UIPickerView = UIPickerView.alloc()
    @IBOutlet var textField : UITextField = nil
    override func viewDidLoad() {
        super.viewDidLoad()
        picker = UIPickerView()
        picker.delegate = self
        picker.dataSource = self
        picker.backgroundColor = UIColor.blackColor()
        textField.inputView = picker
    }
}
extension View: UIPickerViewDataSource {

    func numberOfComponentsInPickerView(colorPicker: UIPickerView!) -> Int {
        return 1
    }

    func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int {
        return 5
    }
}

extension View: UIPickerViewDelegate {

    func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> String!
    {
        return "Text"
    }
}

Why can't I see this pickerView when I run the app?

Edit: Adding a breakpoint inside the extensions does not stop the program, they are not being called.

like image 886
trumpeter201 Avatar asked Jul 19 '14 03:07

trumpeter201


3 Answers

I found the problem-the code for assigning the input view doesn't include self. It should read

self.textField.inputView = picker
like image 178
trumpeter201 Avatar answered Nov 18 '22 10:11

trumpeter201


I was having the same problem trying to get the picker view to show up when clicking in the textfield. My issue was that for some reason my iOS simulator had the "Connect Hardware Keyboard" checked. In the iOS menu go to Hardware -> Keyboard and make sure "Connect Hardware Keyboard" is unchecked. Feels dumb now not noticing any keyboard was popping up in the app for several hours but hopefully this will help save someone else the frustration.

Just wanted to add an edit: In the iOS simulator you can try toggling the software keyboard (command+K) This worked for me as well in this case and allowed me to keep the hardware keyboard connected. Just something to check quickly before assuming your code is incorrect.

like image 44
Jason Wiles Avatar answered Nov 18 '22 10:11

Jason Wiles


I'm not sure why you cannot see the picker. But it's a wrong way.

To create an instance using:

 picker = UIPickerView.alloc()

In Swift:

you should use:

picker = UIPickerView()
like image 42
Louis Zhu Avatar answered Nov 18 '22 11:11

Louis Zhu