Swift3弹窗添加数据后TableView未刷新 求代码排查
嘿,我看到你遇到了添加数据后TableView不刷新的问题,这在iOS开发里挺常见的,咱们一步步来排查和解决:
问题核心原因
当你在弹窗里把新数据保存到position、company、location这些数组后,只是更新了数据源,但TableView本身不会自动感知到数据变化——必须手动通知它重新加载才行。
具体解决方案
1. 先确认数据真的被加到数据源里了
先检查弹窗的保存逻辑,确保新输入的字段值确实被append到了目标数组中。比如弹窗的保存按钮点击事件里,应该有类似这样的代码(如果弹窗是模态弹出的,要正确引用到EditTest控制器的数据源):
// 假设弹窗里获取到了新的positionStr、companyStr、locationStr if let parentVC = presentingViewController as? EditTest { parentVC.position.append(positionStr as AnyObject) parentVC.company.append(companyStr as AnyObject) parentVC.location.append(locationStr as AnyObject) }
2. 数据更新后立即触发TableView刷新
这是解决问题的关键!数据添加完成后,必须调用tableView.reloadData()通知TableView重新渲染。推荐用闭包回调的方式实现,既优雅又能避免循环引用:
第一步:给弹窗控制器添加闭包回调
class AddDataPopup: UIViewController { // 定义保存完成的回调闭包 var onSaveCompleted: (() -> Void)? // 保存按钮点击事件 @IBAction func saveButtonTapped(_ sender: UIButton) { // 先完成数据添加逻辑(就是上面提到的把数据加到parentVC的数组里) // ... // 触发回调,通知父控制器刷新TableView onSaveCompleted?() // 关闭弹窗 dismiss(animated: true) } }
第二步:在EditTest里弹出弹窗时绑定回调
@IBAction func addButtonTapped(_ sender: UIButton) { let popup = storyboard?.instantiateViewController(withIdentifier: "AddDataPopup") as! AddDataPopup // 绑定回调,用[weak self]避免循环引用 popup.onSaveCompleted = { [weak self] in self?.tableView.reloadData() } present(popup, animated: true) }
3. 额外检查项
- 确认
EditTest的viewDidLoad()里已经设置了TableView的代理和数据源:override func viewDidLoad() { super.viewDidLoad() tableView.dataSource = self tableView.delegate = self } - 检查TableView的数据源方法是否正确使用了更新后的数组:
比如numberOfRowsInSection要返回position.count,cellForRowAt里要正确取position[indexPath.row]等数据,避免用硬编码的行数或旧数据。
内容的提问来源于stack exchange,提问作者swift test
相关产品推荐
相关产品推荐

