2017-11-15 3 views
0

Ich möchte eine datepicker nach Drücken einer tableview swipe edit action button zeigen. Es heißt postpone, und nachdem ich einen Datepicker geöffnet habe, möchte ich, dass mein Benutzer ein Datum auswählt und die Done-Taste der Datepicker-Toolbar drückt. Ich habe die datepicker und toolbar erstellt, aber ich weiß nicht, wie man es mit der Bearbeitungsaktion zeigt. HierWie zeige ich einen Datumsauswahl nach dem Drücken einer TableView Zelle Swipe Edit Aktion

ist der Datepicker Code:

func createDatePicker() { 
    picker.datePickerMode = .date 

    let toolbar = UIToolbar() 
    toolbar.barStyle = UIBarStyle.default 
    toolbar.isTranslucent = true 
    toolbar.tintColor = UIColor(red: 189/255, green: 194/255, blue: 201/255, alpha: 1) 
    toolbar.sizeToFit() 

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(donePicker)) 
    doneButton.tintColor = UIColor.black 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(cancelPicker)) 
    cancelButton.tintColor = UIColor.black 

    toolbar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
    toolbar.isUserInteractionEnabled = true 

    //dateTimeTextField.inputAccessoryView = toolbar (I was using this part to open a datepicker with a text field but I don't know how to modify it for the edit action) 
    //dateTimeTextField.inputView = picker 
    picker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged) 
} 

Aktion bearbeiten Code:

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? 
{ 
    let postpone = UITableViewRowAction(style: .normal, title: "Postpone"){(UITableViewRowAction,NSIndexPath) -> Void in 
     self.tasks[indexPath.row].status = "postpone" 
     let encodedData = NSKeyedArchiver.archivedData(withRootObject: self.tasks) 
     UserDefaults.standard.removeObject(forKey: "taskList") 
     UserDefaults.standard.set(encodedData, forKey: "taskList") 
     self.taskTableView.reloadData() 
    } 
    postpone.backgroundColor = UIColor.init(red: 222/255, green: 119/255, blue: 49/255, alpha: 1) 

    return [done, cancel, postpone] 
} 

Aktion bearbeiten Tasten Bild:

Edit Action buttons

Datumsauswahl Bild in einer anderen Seite:

Datepicker

aktualisieren ~ Nachdem ich diesen Code

picker.addSubview(toolbar) 
    taskTableView.addSubview(picker) 
    taskTableView.bringSubview(toFront: picker) 

Datepicker

+0

Sie benötigen eine Ansicht in der pospone Aktion in Ihrer 'editActionsForRowAt' Aktion öffnen –

Antwort

1

hinzugefügt wurden, können Sie die Datumsauswahl anzeigen Anzeige ding es zu Ihrer Ansicht:

func createDatePicker() { 
    picker.datePickerMode = .date 

    let toolbar = UIToolbar() 
    toolbar.barStyle = UIBarStyle.default 
    toolbar.isTranslucent = true 
    toolbar.tintColor = UIColor(red: 189/255, green: 194/255, blue: 201/255, alpha: 1) 
    toolbar.sizeToFit() 

    let doneButton = UIBarButtonItem(title: "Done", style: UIBarButtonItemStyle.plain, target: self, action: #selector(donePicker)) 
    doneButton.tintColor = UIColor.black 
    let spaceButton = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.flexibleSpace, target: nil, action: nil) 
    let cancelButton = UIBarButtonItem(title: "Cancel", style: UIBarButtonItemStyle.plain, target: self, action: #selector(cancelPicker)) 
    cancelButton.tintColor = UIColor.black 

    toolbar.setItems([cancelButton, spaceButton, doneButton], animated: false) 
    toolbar.isUserInteractionEnabled = true 

    picker.addTarget(self, action: #selector(handleDatePicker(sender:)), for: .valueChanged) 

    //add the picker to your view or tableView if you use UITableViewController 
    taskTableView.addSubview(picker) 
    taskTableView.bringSubview(toFront: picker) 
} 

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { 
     let postpone = UITableViewRowAction(style: .normal, title: "Postpone"){(UITableViewRowAction,NSIndexPath) -> Void in 
     self.tasks[indexPath.row].status = "postpone" 
     let encodedData = NSKeyedArchiver.archivedData(withRootObject: self.tasks) 
     UserDefaults.standard.removeObject(forKey: "taskList") 
     UserDefaults.standard.set(encodedData, forKey: "taskList") 
     self.taskTableView.reloadData() 

     //show your date picker 
     self.createDatePicker() 

    } 
    postpone.backgroundColor = UIColor.init(red: 222/255, green: 119/255, blue: 49/255, alpha: 1) 

    return [done, cancel, postpone] 
} 

den Picker Aufruf zu entfernen: picker.removeFromSuperview()

+0

ich eine neue ss der Datumsauswahl hinzugefügt. Ich möchte, dass es unten auf der Seite bleibt. – esdoodle

+1

Sie können Ihren Picker-Rahmen auf diese Weise festlegen: 'picker.frame = CGrect (x: 0, y: view.frame.height - 260, width: view.frame.width, height: 260)' 260 ist die Höhe deiner Picker (216) + die Werkzeugleiste Höhe (44) –

+0

Es funktioniert perfekt! Vielen Dank – esdoodle

Verwandte Themen