I have been trying to change the colour of the background of the swipe to delete button in my tableview. I took a look at some Objective-C examples but I haven't been able to translate them into Swift.
This is my code at the moment:
var cellDeleteBackground = UIView()
cellDeleteBackground.backgroundColor = UIColor.greenColor()
cell.editingAccessoryView = cellDeleteBackground
I have this in cellForRowAtIndexPath but at the moment it is crashing with error 'terminating with uncaught exception of type NSException'
Could this code be interfering?
override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool {
if tableView == self.searchDisplayController?.searchResultsTableView {
return false
} else {
return true
}
}
override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) {
if (editingStyle == UITableViewCellEditingStyle.Delete) {
if tableView == self.searchDisplayController?.searchResultsTableView {
UITableViewCellEditingStyle.None
} else {
var valueToRemove: AnyObject! = unformatted.objectAtIndex(indexPath.row)
if images.objectAtIndex(indexPath.row) as NSObject == 0 {
totalSpendingsCounter = totalSpendingsCounter - Double(valueToRemove as NSNumber)
NSUserDefaults.standardUserDefaults().setDouble(totalSpendingsCounter, forKey: "spendingsCounter")
} else if images.objectAtIndex(indexPath.row) as NSObject == 1 {
totalCreditCounter = totalCreditCounter - Double(valueToRemove as NSNumber)
NSUserDefaults.standardUserDefaults().setDouble(totalCreditCounter, forKey: "creditCounter")
}
currencyDouble = NSUserDefaults.standardUserDefaults().doubleForKey("currencyCounter")
currentBudgetCalculation = currencyDouble + totalCreditCounter - totalSpendingsCounter
newTransactionEntered = true
var formatter = NSNumberFormatter()
formatter.numberStyle = .CurrencyStyle
formatter.locale = NSLocale.currentLocale() // This is the default
var formattedNumberCurrent = formatter.stringFromNumber(currentBudgetCalculation)
var defaults = NSUserDefaults(suiteName: "group.AffordIt")
defaults.setObject(formattedNumberCurrent, forKey: "currentBudgetWidget")
defaults.setObject(newTransactionEntered, forKey: "new")
values.removeObjectAtIndex(indexPath.row)
images.removeObjectAtIndex(indexPath.row)
names.removeObjectAtIndex(indexPath.row)
dates.removeObjectAtIndex(indexPath.row)
unformatted.removeObjectAtIndex(indexPath.row)
notes.removeObjectAtIndex(indexPath.row)
NSUserDefaults.standardUserDefaults().setObject(names, forKey: "names")
NSUserDefaults.standardUserDefaults().setObject(values, forKey: "values")
NSUserDefaults.standardUserDefaults().setObject(dates, forKey: "dates")
NSUserDefaults.standardUserDefaults().setObject(unformatted, forKey: "unformatted")
NSUserDefaults.standardUserDefaults().setObject(images, forKey: "images")
NSUserDefaults.standardUserDefaults().setObject(notes, forKey: "notes")
tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)
}
}
}
This is how you can customise swipe-to-delete in iOS8:
func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? {
var deleteButton = UITableViewRowAction(style: .Default, title: "Delete", handler: { (action, indexPath) in
self.tableView.dataSource?.tableView?(
self.tableView,
commitEditingStyle: .Delete,
forRowAtIndexPath: indexPath
)
return
})
deleteButton.backgroundColor = UIColor.blackColor()
return [deleteButton]
}
Below the code updated for Swift 4, Xcode 9:
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
let deleteButton = UITableViewRowAction(style: .default, title: "Delete") { (action, indexPath) in
self.tableView.dataSource?.tableView!(self.tableView, commit: .delete, forRowAt: indexPath)
return
}
deleteButton.backgroundColor = UIColor.black
return [deleteButton]
}
Custom swipe to delete (background colour as black) for iOS 14 as UITableViewRowAction is deprecated this uses UIContextualAction, I couldn't find a good example.
override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
let delete = UIContextualAction(style: .destructive, title: "Delete") { [self] (action, view, completion) in
if indexPath.row == 0 {
deleteGoalCell(indexPath: indexPath)
goals.remove(at: indexPath.section)
let indexSet = IndexSet(arrayLiteral: indexPath.section)
tableView.deleteSections(indexSet, with: .fade)
} else {
deleteTaskcell(indexPath: indexPath)
tableView.deleteRows(at: [indexPath], with: .fade)
DispatchQueue.main.asyncAfter(deadline: .now() + 0.4) {
self.tableView.reloadData()
}
}
completion(true)
}
delete.backgroundColor = UIColor.black
let config = UISwipeActionsConfiguration(actions: [delete])
config.performsFirstActionWithFullSwipe = false
return config
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With