I want to call table.reloadData() when I dismiss my UIAlertController. But I don't know how to do it.
I tried putting table.reloadData() in ViewController's viewWillAppear but it doesn't work because Alert's modalPresentationStyle cannot be changed.
I'm presenting alertController like so:
`let alert = UIAlertController(title: "Some Title", message: "Enter a text", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak alert] (_) in
let enteredTitle = alert!.textFields![0]
let enteredNoteDescription = alert!.textFields![1]
//Save to DB
let note = Note(context: CoreDataService.managedObjectContext)
note.title = enteredTitle.text
note.noteDescription = enteredNoteDescription.text
CoreDataService.saveContext()
}))
present(alert, animated: true, completion: nil)`
func showErrorAlertWithAction( withTitle: String,
andMessage: String,
buttonName: String,
completion: @escaping (() -> Void))
{
let alert = UIAlertController(title: withTitle, message: andMessage, preferredStyle: .alert)
let action = UIAlertAction(title: buttonName, style: .default) { _ in completion() }
alert.addAction(action)
DispatchQueue.main.async {
self.present(alert, animated: true)
}
}
Usage is:
showErrorAlertWithAction(withTitle: "Some Title", andMessage: "Enter a text", buttonName: "OK") {
// here you use action that will take effect after user taps "OK" button e.g:
//Save to DB
let note = Note(context: CoreDataService.managedObjectContext)
note.title = enteredTitle.text
note.noteDescription = enteredNoteDescription.text
CoreDataService.saveContext()
}
I've tried this solution and worked with me:
Suppose that your data source is:
var elements = ["first", "second", "third"]
and then your alert creation be like this:
let alert = UIAlertController(title: "Some Title", message: "Enter a text", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "OK", style: .default, handler: { [weak self] _ in
self?.elements.append("forth")
self?.tableView.reloadData()
}))
present(alert, animated: true, completion: nil)
So As you see I've reloaded the table view in the action handler completion using self?.tableView.reloadData() and the worked fine with me. let me know if it didn't work with you
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.