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

Как добавить 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 tableView (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]

}

(может быть) будет пополняться...

March 9, 2019