Работаем с UITableViewController (Swift 4)

March 9, 2019

Как добавить TableViewController и заполнить его элементами массива писать, наверное, пока не буду, здесь оставлю вещи посложнее. Хотя, наверное имеет смысл сделать полный гайд, от начала до конца, с такими фишками, как сохранение массива при изменении в TableViewController и передаче массива в другой ViewController.

Пока что выпишу, чтобы не забыть, такие шпаргалки:

 

Возможность изменять порядок элементов в TableViewController:

//rearrange cells by drag & move

    override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) {

        let movedObjTemp = myAwesomeArray[sourceIndexPath.item]

        myAwesomeArray.remove(at: sourceIndexPath.item)

        myAwesomeArray.insert(movedObjTemp, at: destinationIndexPath.item)

    }

 

Возможность изменять сами элементы, а также удалять их из массива

//editing the table view (also editing single cells)

    override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {

        return true

    }

    

    override func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {

        let editAction = UITableViewRowAction(style: .normal, title: "Edit", handler: { (action, indexPath) in

            let alert = UIAlertController(title: "", message: "Edit name", preferredStyle: .alert)

            alert.addTextField(configurationHandler: { (textField) in

                textField.text = self.myAwesomeArray[indexPath.row]

            })

            alert.addAction(UIAlertAction(title: "Update", style: .default, handler: { (updateAction) in

                self.myAwesomeArray[indexPath.row] = alert.textFields!.first!.text!

                self.tableView.reloadRows(at: [indexPath], with: .fade)

            }))

            alert.addAction(UIAlertAction(title: "Cancel", style: .cancel, handler: nil))

            self.present(alert, animated: false)

        })

        

        let deleteAction = UITableViewRowAction(style: .default, title: "Delete", handler: { (action, indexPath) in

            self.myAwesomeArray.remove(at: indexPath.row)

            tableView.reloadData()

        })

        

        return [deleteAction, editAction]

        

    }

 

будет пополняться