如何在 alertController 之后更新 tableView?

Posted

技术标签:

【中文标题】如何在 alertController 之后更新 tableView?【英文标题】:How to update tableView after alertController? 【发布时间】:2021-12-10 17:54:38 【问题描述】:

我有一个 tableView,我在 viewDidLoad() 中填充了 Realm。

var data = RealmModel.shared.getSections()
RealmModel.shared.fillTableview(company: "Airbus", plane: "A350", status: false)
RealmModel.shared.fillTableview(company: "Airbus", plane: "A380", status: false)
RealmModel.shared.fillTableview(company: "Boeing", plane: "Boeing 737", status: false)
data = RealmModel.shared.getSections()
statisticsTableView.reloadData()

我想用alertControllertableView 添加元素。

@IBAction func addPlane(_ sender: Any) 
    let alertController = UIAlertController(title: "На каком самолёте вы летали?", message: nil, preferredStyle: .alert)
    alertController.addTextField  (textfield) in 
    let alertCancel = UIAlertAction(title: "Отменить", style: .destructive)  (alert) in 
    let alertAction = UIAlertAction(title: "Добавить", style: .cancel)  (alert) in
    let newItem = alertController.textFields?.first?.text
    RealmModel.shared.fillTableview(company: "Другие", plane: newItem ?? "", status: true)
    

    alertController.addAction(alertAction)
    alertController.addAction(alertCancel)
    present(alertController, animated: true, completion: nil)
    statisticsTableView.reloadData()

alertController 关闭后我应该如何处理 tableView 更新,因为现在它只在我关闭应用程序然后重新打开它后更新。

【问题讨论】:

添加 data = RealmModel.shared.getSections()statisticsTableView.reloadData() 作为 alertAction let alertAction = UIAlertAction(title: "Добавить", style: .cancel) (alert) in let newItem = alertController.textFields?.first?.text RealmModel.shared.fillTableview(company: "Другие", plane: newItem ?? "", status: true) data = RealmModel.shared.getSections() statisticsTableView.reloadData() 中应该完成这项工作的最后一条语句 欢迎来到 SO。这个问题很模糊,有很多事情可能会导致这个问题。比如我们不知道tableView的dataSource是什么。数组?它是如何填充的?代码中没有向该数据源添加任何内容,因此 tableView 不会有任何新数据。您能否通过添加更多相关代码来澄清问题? 【参考方案1】:

发现问题,我不得不在 AlertAction 中重新加载 tableView,而不是之后

@IBAction func addPlane(_ sender: Any) 
    let alertController = UIAlertController(title: "На каком самолёте вы летали?", message: nil, preferredStyle: .alert)
    alertController.addTextField  (textfield) in
    
    let alertCancel = UIAlertAction(title: "Отменить", style: .destructive)  (alert) in 
    let alertAction = UIAlertAction(title: "Добавить", style: .cancel)  (alert) in
        let newItem = alertController.textFields?.first?.text
        RealmModel.shared.fillTableview(company: "Другие", plane: newItem ?? "", status: true)
        self.data = RealmModel.shared.getSections()
        self.statisticsTableView.reloadData()
     
    alertController.addAction(alertAction)
    alertController.addAction(alertCancel)
    present(alertController, animated: true, completion: nil)

【讨论】:

以上是关于如何在 alertController 之后更新 tableView?的主要内容,如果未能解决你的问题,请参考以下文章

Swift - 如何在自定义 AlertController 中点击按钮时呈现 ViewController

Swift 2 - 当 AlertController 出现时如何切换到另一个 ViewController?

在非ViewController中显示AlertController的方法

内存泄漏AlertController / UIImagePickerController

AlertController的使用

AlertController的使用