fandro
fandro

Reputation: 4903

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

}

Upvotes: 1

Views: 1557

Answers (1)

123FLO321
123FLO321

Reputation: 862

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

Upvotes: 3

Related Questions