override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
self.storyboard?.instantiateViewController(withIdentifier: "ChildTableView") as! ChildTableViewController
childTV.updateTable(id: indexPath.row)
}
我需要在第一个tableview单元格点击时更新第二个tableview。 我怎么能这样做?
答案 0 :(得分:0)
好的,我想我看到了问题。你这样做的方法是使用两个UITableViewControllers及其表视图。所以现在在两个表视图控制器之间进行通信时出现问题。但请考虑这一点:如果您真正创建了子视图控制器,则表视图控制器是同一父视图的子视图。因此,第一个表视图控制器可以获取其父视图控制器,然后获取父视图控制器,然后获取第二个子视图控制器,这必须是第二个表视图控制器。
换句话说,如果您的视图控制器层次结构是:
ParentViewController
TableViewController1
TableViewController2
...然后TableViewController1可以说:
let tvc2 = self.parent!.childViewControllers[1] as! TableViewController2
......现在你已经建立了他们之间的沟通渠道。因此,现在表视图控制器1可以与表视图控制器2通信并告诉它更新其表。您需要在表视图控制器2中拥有一个表视图控制器1可以调用的方法,以便将其传递给任何所需的数据并告诉它该做什么。
答案 1 :(得分:0)
在Second TableView中:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(ChildTableViewController.updateTable(sender:)), name: NSNotification.Name(rawValue: "updateChild"), object: nil)
}
func updateTable(sender:NSNotification){
tableView.reloadData()
}
第一个TableView中的:
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
tableView.deselectRow(at: indexPath, animated: false)
selectedItem["id"]=indexPath.row
NotificationCenter.default.post(name: NSNotification.Name(rawValue: "updateChild"),object:selectedItem)
}