在另一个视图控制器展开 segue 后重新加载 UIView 数据上的自定义 tableview
Posted
技术标签:
【中文标题】在另一个视图控制器展开 segue 后重新加载 UIView 数据上的自定义 tableview【英文标题】:Reload custom tableview on UIView data after another view controller unwind segue 【发布时间】:2017-11-07 05:18:01 【问题描述】:在另一个视图控制器完成保存文件并展开到 tableview 后,我一直在尝试重新加载数据
顺便说一句,由于这个tableview是在UIViewController
上创建的,所以我在尝试放入tableview.reload()
后得到了这个错误
线程 1:EXC_BAD_ACCESS(代码=2,地址=0x7ffedffbcfa8)
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
tableView.reloadData()
return fileURLs.count
我猜这样做可能会导致无限循环并永远保持reloadData?
实现此方法的正确方法是什么?
编辑
放
override func viewDidAppear(_ animated: Bool)
super.viewDidAppear(true)
tableView.reloadData()
或
@IBAction func unwindToCSVList(sender: UIStoryboardSegue)
//tableView.reloadData()
无论哪种方式都不起作用,这与我的 UITableView
代表有关吗?
【问题讨论】:
有可能,该表正在重新加载,但您传递的数组可能不会更新。 @DipakKacha 是的!我解决了。谢谢,如你所说 正如@DipakKacha 所说“您传递的数组可能不会更新”,您应该使用委托方法将更新的数据传递给第一个控制器,然后更新数组内的数据并在之后重新加载表或重新- 调用 API。 @Mr.Bista,当他使用 unwind segue 时,我们可以从 segue 传递任何东西。那么为什么要使用委托或任何其他额外的代码呢? @Mr.Bista,没错。 【参考方案1】:tableView.reloadData()
导致对numberOfRowsInSection
的调用,反之亦然。你猜对了:无限循环。
您可以执行以下操作:
-
创建一个委托,它将由第一个控制器遵守。
第二个控制器将调用委托方法并在其中重新加载表。
代表示例:get indexPath of UITableViewCell on click of Button from Cell
或者简单的方法。
在ViewWillAppear
或viewDidAppear
方法中调用tableView.reloadData()
。
【讨论】:
将 tableView.reloadData() 放入 viewWillAppear 或 viewDidAppear 从 VC2 展开后仍无法重新加载 如果来自 VC2 的展开 segue 在 VC1 中调用动作 (A),则将 tableView.reloadData() 放入动作 A。以上是关于在另一个视图控制器展开 segue 后重新加载 UIView 数据上的自定义 tableview的主要内容,如果未能解决你的问题,请参考以下文章