кнопка удаления с использованием деструктивного стиля и UIAlertAction - PullRequest
0 голосов
/ 17 октября 2018

Я новичок в Swift и работаю над приложением контактов.Я хотел бы иметь возможность удалить контакт, который у меня есть, когда пользователь нажимает кнопку delete, но у меня возникают проблемы с его реализацией.На данный момент у меня есть функция, которая позволяет мне видеть contact, когда пользователь нажимает Show Details, а также имеет cancel button.Но для моего удаления я хочу иметь возможность избавиться от всего, с чем я контактирую, на который я нажимаю.Я вставлю код ниже.

  override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
        let selectedContact = contacts[indexPath.row] as? Contact
        let name = selectedContact!.contactName!
        let actionHandler = { (action:UIAlertAction!) -> Void in
            //            self.performSegue(withIdentifier: "EditContact", sender: tableView.cellForRow(at: indexPath))
            let storyboard = UIStoryboard(name: "Main", bundle: nil)
            let controller = storyboard.instantiateViewController(withIdentifier: "ContactController")
                as? ContactsViewController
            controller?.currentContact = selectedContact
            self.navigationController?.pushViewController(controller!, animated: true)
        }

        let alertController = UIAlertController(title: "Contact selected",
                                                message: "Selected row: \(indexPath.row) (\(name))",
            preferredStyle: .alert)

        let actionDelete = UIAlertAction(title: "Delete" ,
                                   style: .destructive,
                                   handler:nil)

        let actionCancel = UIAlertAction(title: "Cancel",
                                         style: .cancel,
                                         handler: nil)
        let actionDetails = UIAlertAction(title: "Show Details",
                                          style: .default,
                                          handler: actionHandler)
        alertController.addAction(actionCancel)
        alertController.addAction(actionDetails)
        alertController.addAction(actionDelete)
        present(alertController, animated: true, completion: nil)
    }

1 Ответ

0 голосов
/ 17 октября 2018

Вы можете попробовать это для всех с / без действия, так как нет необходимости создавать переменную и добавлять ее, вы можете addAction с ее обработчиком напрямую

alert.addAction(UIAlertAction(title: "Delete", style:.destructive, handler: { (action) in 

      contacts.remove(at:indexPath.row) 
      tableView.deleteRows(at:[indexPath],with:.fade)

}))

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let selectedContact = contacts[indexPath.row] as? Contact
    let name = selectedContact!.contactName! 
    let alertController = UIAlertController(title: "Contact selected",
                                            message: "Selected row: \(indexPath.row) (\(name))",
        preferredStyle: .alert)


     alertController.addAction(UIAlertAction(title: "Show Details", style:.default, handler: { (action) in 

        let storyboard = UIStoryboard(name: "Main", bundle: nil)
        let controller = storyboard.instantiateViewController(withIdentifier: "ContactController")
            as? ContactsViewController
        controller?.currentContact = selectedContact
        self.navigationController?.pushViewController(controller!, animated: true)

    }))

    alertController.addAction(UIAlertAction(title: "Delete", style:.destructive, handler: { (action) in 

        contacts.remove(at:indexPath.row) 
        tableView.deleteRows(at:[indexPath],with:.fade)

    }))

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

    present(alertController, animated: true, completion: nil)
}
...