Search code examples
iosswiftactionsheetpicker

ActionSheetPicker Invalid target/action combination used for ActionSheetPicker'


Hi I'm trying to use ActionSheetPicker to let the user select a time for a reminder but I get the error described in the title. Here is my Code:

SelectTime(sender: validCell) // called when tapping a date

// Time Picker
func SelectTime(sender: UIView){
    //let timePicker = ActionSheetDatePicker.show(withTitle: "Enter time for reminder", datePickerMode: .time, selectedDate: userDate, target: self, action: , origin: sender.superview!.superview)
    let timePicker = ActionSheetDatePicker.show(withTitle: "Enter time for reminder", datePickerMode: .time, selectedDate: userDate, target: self, action: Selector(("timePicked")), origin: sender.superview!.superview, cancelAction: Selector(("timeCanceled")))

    timePicker?.minuteInterval = 5

    timePicker?.locale = Calendar.current.locale
    timePicker?.show()

}
func timePicked(time: Date){
    dateSelected.text = formatter.string(for: time)
}
func timeCanceled(){
    print("Canceled")
    dismiss(animated: true, completion: nil)
}

The cancel code is never called and when I press cancel on the timePicker it shows another time picker underneath it without any buttons. Gif when canceling http://www.giphy.com/gifs/l1J3zMQWJ23GpHEaY

The dateSelected is also never called. I'm I doing the selectors wrong?


Solution

  • Change this code

    func SelectTime(sender: UIView){
        let timePicker = ActionSheetDatePicker.show(withTitle: "Enter time for reminder", datePickerMode: .time, selectedDate: userDate, target: self, action: , origin: sender.superview!.superview)
        let timePicker = ActionSheetDatePicker.show(withTitle: "Enter time for reminder", datePickerMode: .time, selectedDate: userDate, target: self, action: Selector(("timePicked")), origin: sender.superview!.superview, cancelAction: Selector(("timeCanceled")))
    
         timePicker?.minuteInterval = 5
    
         timePicker?.locale = Calendar.current.locale
    timePicker?.show()
    
    }
     func timePicked(time: Date){
    dateSelected.text = formatter.string(for: time)
    }
    func timeCanceled(){
    print("Canceled")
    dismiss(animated: true, completion: nil)
    }
    

    in this code....

     let timePicker = ActionSheetDatePicker(title: "Date:", datePickerMode: UIDatePickerMode.date, selectedDate: Date(), doneBlock: {
            picker, value, index in
     dateSelected.text = formatter.string(for: time)
            print("value = \(value)")
            print("index = \(index)")
            print("picker = \(picker)")
            return
        }, cancel: { ActionStringCancelBlock in
            print("cancel")
            return }, origin: sender.superview!.superview)
         timePicker?.minuteInterval = 5
         timePicker?.locale = Calendar.current.locale