Search code examples
swift2uipicker

Can't set default value UIPicker swift 2


I have a swift project with a custom cell from a tableview, ans inside it I have a label to display the value of a UIPicker. The UiPicker appear in the keyboard when you press the label, I wan't to be able to set default values to my UIPicker, I tried a lot of differents technics with the 2 methods : selectRow(), without success, here is my CustomCell code :

import UIKit

class CustomCell: UITableViewCell, UIPickerViewDataSource, UIPickerViewDelegate {


    @IBOutlet weak var answer: UITextField!

    var delegate: QuestionSelectorCellDelegate?
    var pickOption: [String] = []
    var pickerView:UIPickerView  = UIPickerView()

    override func awakeFromNib() {
        super.awakeFromNib()
        // Initialization code
    }



    @IBAction func editBeginQuestionSelectorCell(sender: UITextField) {
        pickerView = UIPickerView()
        pickerView.delegate = self
        sender.inputView = pickerView
    }


    func displayBlock(block: Block){
        if block.answers != nil {
            pickOption = block.answers! // block.answers! = ["blue","red","green"] for example
        }

    }


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

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

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

    func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
        if row < pickOption.count {
            answer.text = pickOption[row]
            delegate?.updateQuestionSelectorCell(self, rep: pickOption[row])
        }
    }

}

Solution

  • Updated your code.
    You didn't set the pickerView.dataSource!
    If i understood your question, you want an element to be selected by default, other than element at index 0. I also added that.

    import UIKit
    
    class CustomCell: UITableViewCell, UIPickerViewDataSource, UIPickerViewDelegate {
    
    
        @IBOutlet weak var answer: UITextField!
    
        var delegate: QuestionSelectorCellDelegate?
        var pickOption: [String] = []
        var pickerView:UIPickerView  = UIPickerView()
    
        override func awakeFromNib() {
            super.awakeFromNib()
            // Initialization code
        }
    
    
    
        @IBAction func editBeginQuestionSelectorCell(sender: UITextField) {
            pickerView = UIPickerView()
            pickerView.delegate = self
    
            // --- Thats what I added ---
            pickerView.dataSource = self
            let indexOfDefaultElement = 1 // Make sure that an element at this index exists
            pickerView.selectRow(indexOfDefaultElement, inComponent: 0, animated: false)
    
            sender.inputView = pickerView
        }
    
    
        func displayBlock(block: Block){
            if block.answers != nil {
                pickOption = block.answers! // block.answers! = ["blue","red","green"] for example
            }
    
        }
    
    
        func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int {
            return 1
        }
    
        func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int {
            return pickOption.count
        }
    
        func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
            return pickOption[row]
        }
    
        func pickerView(pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {
            if row < pickOption.count {
                answer.text = pickOption[row]
                delegate?.updateQuestionSelectorCell(self, rep: pickOption[row])
            }
        }
    }