如何在同一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
相关产品推荐
相关产品推荐

