Добавить салфетки для удаления UITableViewCell

Я делаю приложение CheckList с UITableView . Мне было интересно, как добавить салфетки для удаления UITableViewCell .

Это мой ViewController.swift:

 import UIKit class ViewController: UIViewController, UITextFieldDelegate, UITableViewDelegate, UITableViewDataSource { var tableView: UITableView! var textField: UITextField! var tableViewData:Array = [] // Define Colors let lightColor: UIColor = UIColor(red: 0.996, green: 0.467, blue: 0.224, alpha: 1) let medColor: UIColor = UIColor(red: 0.973, green: 0.388, blue: 0.173, alpha: 1) let darkColor: UIColor = UIColor(red: 0.800, green: 0.263, blue: 0.106, alpha: 1) let greenColor: UIColor = UIColor(red: 0.251, green: 0.831, blue: 0.494, alpha: 1) init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initialization } override func viewDidLoad() { super.viewDidLoad() //Set up table view self.tableView = UITableView(frame: CGRectMake(0, 100, self.view.bounds.size.width, self.view.bounds.size.height-100), style: UITableViewStyle.Plain) self.tableView.registerClass(MyTableViewCell.self, forCellReuseIdentifier: "myCell") self.tableView.backgroundColor = darkColor //self.tableView.separatorStyle = UITableViewCellSeparatorStyle.None self.tableView.delegate = self self.tableView.dataSource = self self.view.addSubview(self.tableView) //Set up text field self.textField = UITextField(frame: CGRectMake(0, 0, self.view.bounds.size.width, 100)) self.textField.backgroundColor = lightColor self.textField.font = UIFont(name: "AvenirNext-Bold", size: 26) self.textField.delegate = self self.view.addSubview(self.textField) } //Table View Delegate func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { return tableViewData.count } func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { var myNewCell: MyTableViewCell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as MyTableViewCell myNewCell.text = self.tableViewData[indexPath.row] return myNewCell } func tableView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!) { let mySelectedCell:UITableViewCell = tableView.cellForRowAtIndexPath(indexPath) //Colors mySelectedCell.detailTextLabel.textColor = UIColor.whiteColor() mySelectedCell.tintColor = UIColor.whiteColor() //Setup Details / Date let myDate:NSDate = NSDate() var myDateFormatter:NSDateFormatter = NSDateFormatter() myDateFormatter.dateStyle = NSDateFormatterStyle.MediumStyle mySelectedCell.detailTextLabel.text = myDateFormatter.stringFromDate(myDate) mySelectedCell.accessoryType = UITableViewCellAccessoryType.Checkmark mySelectedCell.backgroundColor = greenColor } override func prefersStatusBarHidden() -> Bool { return true } //Text Field Delegate func textFieldShouldReturn(textField: UITextField!) -> Bool { tableViewData.append(textField.text) textField.text = "" self.tableView.reloadData() textField.resignFirstResponder() return true } } 

И это MyTableViewCell.swift:

 import UIKit class MyTableViewCell: UITableViewCell { let medColor: UIColor = UIColor(red: 0.973, green: 0.388, blue: 0.173, alpha: 1) init(style: UITableViewCellStyle, reuseIdentifier: String) { super.init(style: UITableViewCellStyle.Subtitle, reuseIdentifier: reuseIdentifier) self.textColor = UIColor.whiteColor() self.backgroundColor = medColor self.selectionStyle = UITableViewCellSelectionStyle.None } override func awakeFromNib() { super.awakeFromNib() // Initialization code } override func setSelected(selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) // Configure the view for the selected state } } 

Я использую iOS8 в качестве цели развертывания (не уверен в том, что он сделает).

Добавьте следующие две функции:

 func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if (editingStyle == UITableViewCellEditingStyle.Delete) { // handle delete (by removing the data from your array and updating the tableview) } } 

Swift 3.0:

 override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if (editingStyle == UITableViewCellEditingStyle.delete) { // handle delete (by removing the data from your array and updating the tableview) } } 

В версии 3.0+ они должны быть переопределены

Другой способ, который позволяет вам изменить текст «Удалить» и добавить дополнительные кнопки при перемещении ячейки, – это использовать editActionsForRowAtIndexPath .

 func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } func tableView(tableView: (UITableView!), commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: (NSIndexPath!)) { } func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [AnyObject]? { var deleteAction = UITableViewRowAction(style: .Default, title: "Delete") {action in //handle delete } var editAction = UITableViewRowAction(style: .Normal, title: "Edit") {action in //handle edit } return [deleteAction, editAction] } 

canEditRowAtIndexPath и commitEditingStyle по-прежнему необходимы, но вы можете оставить commitEditingStyle пустым, так как удаление обрабатывается в editActionsForRowAtIndexPath .

Вы можете попробовать следующее:

 func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool { return true } func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) { if (editingStyle == UITableViewCellEditingStyle.Delete) { NamesTable.beginUpdates() Names.removeAtIndex(indexPath!.row) NamesTable.deleteRowsAtIndexPaths([indexPath], withRowAnimation: nil) NamesTable.endUpdates() } } 
  import UIKit class ViewController: UIViewController ,UITableViewDelegate,UITableViewDataSource { var items: String[] = ["We", "Heart", "Swift","omnamay shivay","om namay bhagwate vasudeva nama"] var cell : UITableViewCell } @IBOutlet var tableview:UITableView override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view, typically from a nib. } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } func tableView(tableView: UITableView!, numberOfRowsInSection section: Int) -> Int { return self.items.count; } func tableView(tableView: UITableView!, cellForRowAtIndexPath indexPath: NSIndexPath!) -> UITableViewCell! { var cell = tableView.dequeueReusableCellWithIdentifier("CELL") as? UITableViewCell if !cell { cell = UITableViewCell(style: UITableViewCellStyle.Value1, reuseIdentifier: "CELL")} cell!.textLabel.text = self.items[indexPath.row] return cell } func tableView(tableView: UITableView!, canEditRowAtIndexPath indexPath: NSIndexPath!) -> Bool { return true } func tableView(tableView: UITableView!, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath!) { if (editingStyle == UITableViewCellEditingStyle.Delete) { // handle delete (by removing the data from your array and updating the tableview) if let tv=tableView { items.removeAtIndex(indexPath!.row) tv.deleteRowsAtIndexPaths([indexPath], withRowAnimation: .Fade) } } } } 

используй это :

 func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if editingStyle == UITableViewCellEditingStyle.Delete { langData.removeAtIndex(indexPath.row) //langData is array from i delete values tableView.deleteRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) } } 

надеюсь, что это поможет вам

Swift 3 с поддержкой пользовательского названия

  func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } //If you want to change title func tableView(_ tableView: UITableView, titleForDeleteConfirmationButtonForRowAt indexPath: IndexPath) -> String? { return "Cancel" } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if (editingStyle == UITableViewCellEditingStyle.delete) { // you might want to delete the item at the array first before calling this function tableView.deleteRows(at: indexPath, with: .automatic) } } 

Это новая функция в iOS11 и Swift 4.

Ссылка:

Trailing Swipe:

 @available(iOS 11.0, *) override func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let delete = UIContextualAction(style: .destructive, title: "Delete") { (action, sourceView, completionHandler) in print("index path of delete: \(indexPath)") completionHandler(true) } let rename = UIContextualAction(style: .normal, title: "Edit") { (action, sourceView, completionHandler) in print("index path of edit: \(indexPath)") completionHandler(true) } let swipeActionConfig = UISwipeActionsConfiguration(actions: [rename, delete]) swipeActionConfig.performsFirstActionWithFullSwipe = false return swipeActionConfig } 

введите описание изображения здесь

Начиная с Xcode 6.1.1, есть некоторые незначительные изменения в ответе Даша.

 override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { if (editingStyle == UITableViewCellEditingStyle.Delete) { // handle delete (by removing the data from your array and updating the tableview) } } 

Работает для меня в Swift 2.0

 override func tableView(tableView: UITableView, canEditRowAtIndexPath indexPath: NSIndexPath) -> Bool { return true } override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) { } override func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { let block = UITableViewRowAction(style: .Normal, title: "Block") { action, index in print("Block") self.removeObjectAtIndexPath(indexPath, animated: true) } let delete = UITableViewRowAction(style: .Default, title: "Delete") { action, index in print("Delete") self.removeObjectAtIndexPath(indexPath, animated: true) } return [delete, block] } 

Swift 3:

 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if (editingStyle == UITableViewCellEditingStyle.delete) { // delete data and row dataList.remove(at: indexPath.row) tableView.deleteRows(at: [indexPath], with: .fade) } } 
 func tableView(tableView: UITableView, editActionsForRowAtIndexPath indexPath: NSIndexPath) -> [UITableViewRowAction]? { let delete = UITableViewRowAction(style: UITableViewRowActionStyle.Default, title: "DELETE"){(UITableViewRowAction,NSIndexPath) -> Void in print("What u want while Pressed delete") } let edit = UITableViewRowAction(style: UITableViewRowActionStyle.Normal, title: "EDIT"){(UITableViewRowAction,NSIndexPath) -> Void in print("What u want while Pressed Edit") } edit.backgroundColor = UIColor.blackColor() return [delete,edit] } 

В Swift 4 tableview добавьте, проведите по экрану, чтобы удалить UITableViewCell

 func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { let delete = UITableViewRowAction(style: .destructive, title: "delete") { (action, indexPath) in // delete item at indexPath } return [delete] } 

Swift 4

 @available(iOS 11.0, *) func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { let action = UIContextualAction(style: .normal, title: "", handler: { (action,view,completionHandler ) in //do stuff completionHandler(true) let data:NSDictionary = self.conversations[indexPath.row] as! NSDictionary print(data) let alert:UIAlertController = UIAlertController(title: "", message: "are you sure want to delete ?", preferredStyle: .alert) alert.addAction(UIAlertAction(title: "CANCEL", style: UIAlertActionStyle.cancel, handler: { (action) in })) self.present(alert, animated: true, completion: nil) }) action.image = UIImage(named: "") action.backgroundColor = UIColor(red: 0/255, green: 148/255, blue: 204/255, alpha: 1.0) let confrigation = UISwipeActionsConfiguration(actions: [action]) return confrigation } 

SWIFT 3 – UIViewController

 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if (editingStyle == UITableViewCellEditingStyle.delete) { // handle delete (by removing the data from your array and updating the tableview) print("delete tableview cell") } } 

быстрый 3

 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if (editingStyle == UITableViewCellEditingStyle.delete) { arrayCityName.remove(at: indexPath.row) self.tableCityName.reloadData() } } 

просто добавьте эти предположения, что ваш массив данных – это данные,

 func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) { if (editingStyle == UITableViewCellEditingStyle.delete) { // handle delete (by removing the data from your array and updating the tableview) if let tv=table { data.remove(at: indexPath.row) tv.deleteRows(at: [indexPath], with: .fade) } } } 

Просто добавьте метод:

 func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? { let delete = UITableViewRowAction(style: UITableViewRowActionStyle.destructive, title: "Delete") { (action, indexPath) in self.arrayFruit.remove(at: indexPath.row) self.tblList.reloadData() } let edit = UITableViewRowAction(style: UITableViewRowActionStyle.normal, title: "Edit") { (action, indexpath) in let alert = UIAlertController(title: "FruitApp", message: "Enter Fuit Name", preferredStyle: UIAlertControllerStyle.alert) alert.addTextField(configurationHandler: { (textField) in textField.placeholder = "Enter new fruit name" }) alert.addAction(UIAlertAction(title: "Update", style: UIAlertActionStyle.default, handler: { [weak alert](_) in let textField = alert?.textFields![0] self.arrayFruit[indexPath.row] = (textField?.text!)! self.tblList.reloadData() })) self.present(alert, animated: true, completion: nil) } edit.backgroundColor = UIColor.blue return [delete,edit] } 

введите описание изображения здесь

 func tableView(_ tableView: UITableView, editActionsForRowAt: IndexPath) -> [UITableViewRowAction]? { let share = UITableViewRowAction(style: .normal, title: "Share") { action, index in //handle like delete button print("share button tapped") } share.backgroundColor = .lightGray let delete = UITableViewRowAction(style: .normal, title: "Delete") { action, index in self.nameArray.remove(at: editActionsForRowAt.row) self.swipeTable.beginUpdates() self.swipeTable.deleteRows(at: [editActionsForRowAt], with: .right) self.swipeTable.endUpdates() print("delete button tapped") } delete.backgroundColor = .orange return [share,delete] } func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool { return true } 
  • Запустить MBProgressHUD в другом streamе?
  • Как предоставить пространство между двумя ячейками в виде таблицы?
  • iOS 7 - Как отобразить выбор даты в виде таблицы?
  • Определите, видна ли ячейка таблицы.
  • Что такое для?
  • Светло-серый фон в области «отскока» UITableView
  • Как сделать UITableViewCell с UITextView внутри, который динамически регулирует его высоту на основе UITextView?
  • Как использовать первый символ в качестве имени раздела
  • Продолжительность анимации строки UITableView и обратный вызов завершения
  • Как отобразить несколько столбцов в UITableView?
  • Сохранять uitableview static при вставке строк вверху
  • Interesting Posts

    Переместите каждую ячейку после столбца A на новую строку

    Как я могу замедлить частоту кадров флэш-игры?

    Зачем использовать слабый указатель для делегирования?

    Скрыть расширение / свернуть символ или деактивировать спецификацию. строки в jqGrid subgrid

    Редактирование реестра установки Windows XP без возможности входа в систему

    c # linq orderby numbers, которые являются строками (и вы не можете преобразовать их в int)

    Изменение поведения адресной строки Firefox

    Как использовать обработчик Android для обновления TextView в streamе пользовательского интерфейса?

    Нельзя привязываться к ‘ng-forOf’, поскольку это не известное свойство

    TrafficStats Api android и расчет ежедневного использования данных

    Сравнение дат данных

    Можно ли решить «Генерируемый массив T создан для параметра varargs», предупреждающий о компиляторе?

    Ошибка Putty X11 proxy: авторизация не распознана

    Можно ли использовать JSF + Facelets с HTML 4/5?

    Eclipse дает ошибку, отсутствует файл R.java после последнего обновления

    Давайте будем гением компьютера.