Swish2121
Swish2121

Reputation: 99

Done Toolbar on UIPickerView

So I have a button on a page when clicked I am opening up a picker view. I have populated the picker view with the months. I added a toolbar but whenever I try to select it just scrolls the picker view to the top.

    monthPicker = UIPickerView(frame: CGRect(x: 0, y: self.view.frame.size.height- monthPicker.frame.size.height, width: self.view.frame.size.width, height: monthPicker.frame.size.height))
    monthPicker.delegate = self
    monthPicker.dataSource = self
    monthpickerData = ["January","February","March","April","May","June","July","August","September","October","November","December"]
    monthPicker.backgroundColor = UIColor.white
    //
    let btnDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.monthdoneButtonAction))
    let barAccessory = UIToolbar(frame: CGRect(x: 0, y: 0, width: monthPicker.frame.size.width, height: 44))
    barAccessory.barStyle = .default
    barAccessory.isTranslucent = false
    barAccessory.items = [flexiblespace,btnDone]
    monthPicker.addSubview(barAccessory)

enter image description here

Upvotes: 2

Views: 7394

Answers (1)

Sunil
Sunil

Reputation: 758

It seems like UIPickerView is not letting its children receive touch events. If you are showing this in conjunction with UITextField you can use it's inputView and inputAccessoryView to acheive the same. Alternatively you can create a top level container UIView to hold both toolbar and picker view like this:

    let picker = UIView(frame: CGRect(x: 0, y: view.frame.height - 260, width: view.frame.width, height: 260))

    // Toolbar
    let btnDone = UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(self.monthdoneButtonAction))
    let spaceButton = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    let cancelButton = UIBarButtonItem(title: "Cancel", style: .plain, target: self, action: #selector(self.cancelClick))

    let barAccessory = UIToolbar(frame: CGRect(x: 0, y: 0, width: picker.frame.width, height: 44))
    barAccessory.barStyle = .default
    barAccessory.isTranslucent = false
    barAccessory.items = [cancelButton, spaceButton, btnDone]
    picker.addSubview(barAccessory)

    // Month UIPIckerView
    monthPicker = UIPickerView(frame: CGRect(x: 0, y: barAccessory.frame.height, width: view.frame.width, height: picker.frame.height-barAccessory.frame.height))
    monthPicker.delegate = self
    monthPicker.dataSource = self
    monthpickerData = ["January","February","March","April","May","June","July","August","September","October","November","December"]
    monthPicker.backgroundColor = UIColor.white
    picker.addSubview(monthPicker)

Upvotes: 7

Related Questions