You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在同一ViewController的AlertViewController点击OK后刷新CollectionView?

解决Alert OK按钮点击后立即刷新CollectionView的问题

嗨,这个问题很好解决!你目前只在viewWillAppear里执行了数据获取和CollectionView刷新的逻辑,所以只有回到页面时才会更新。要实现点击Alert的OK按钮就立刻刷新,只需要把同样的逻辑放到OK按钮的回调里就行,还可以把重复代码抽成一个复用方法,让代码更整洁。

步骤1:提取复用的刷新方法

先把viewWillAppear里的刷新逻辑抽成一个单独的私有方法,这样两处都能调用,避免代码重复:

private func refreshCategoryCollectionView() {
    // 重新获取CoreData中的分类数据
    categoryCoreData.fetchData()
    // 刷新CollectionView
    collCategory.reloadData()
}

步骤2:更新viewWillAppear方法

把原来的代码替换成调用这个新方法:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 
    refreshCategoryCollectionView()
}

步骤3:在Alert的OK按钮回调中调用刷新方法

找到你创建UIAlertController的代码,在OK按钮的UIAlertAction闭包里,完成数据保存后调用上面的刷新方法。这里要注意用[weak self]避免循环引用:

// 示例:创建添加分类的Alert
let addCategoryAlert = UIAlertController(title: "添加分类", message: "请输入分类名称", preferredStyle: .alert)

addCategoryAlert.addTextField { textField in
    textField.placeholder = "比如:工作、生活"
}

// OK按钮的回调
let okAction = UIAlertAction(title: "OK", style: .default) { [weak self] _ in
    guard let self = self, 
          let categoryName = addCategoryAlert.textFields?.first?.text, 
          !categoryName.trimmingCharacters(in: .whitespaces).isEmpty else {
        return
    }
    
    // 这里执行你的数据保存逻辑,比如存到CoreData
    self.categoryCoreData.saveNewCategory(name: categoryName)
    
    // 关键:保存后立即刷新CollectionView
    self.refreshCategoryCollectionView()
}

let cancelAction = UIAlertAction(title: "Cancel", style: .cancel)
addCategoryAlert.addAction(okAction)
addCategoryAlert.addAction(cancelAction)

present(addCategoryAlert, animated: true)

这样操作后,当你点击Alert的OK按钮,数据保存完成的瞬间就会重新获取数据并刷新CollectionView,新添加的分类立刻就能显示出来啦!

内容的提问来源于stack exchange,提问作者Rahul Chopra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:09:34