简体   繁体   中英

Reload tableView after Alert dismiss?

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM