如何在iOS中从详细视图访问主表的视图

我的应用程序的一部分有一个embedded式的主 – 细节部分。 每个细节视图都使用一个自定义的UIViewController 。 当我改变这些UIViewControllers里面的某个东西的值的时候,我需要能够在主UITableViewController变成一个表格行。

我看到的最接近的解决scheme是使用NSNotificationCenter来冒泡任何变化,虽然这感觉有点不整洁。

另一个解决scheme是使用代表? 但我还没有遇到任何示例解决scheme或教程如何在Swift使用它?

我也尝试通过导航备份层次来访问表视图:

  let navController = self.splitViewController!.viewControllers[0]; navController.tableView.reloadData() 

我知道上面的例子是错误的,但我不知道如何以这种方式访问​​主视图,或者即使是正确的方法。

噢,我正在尝试调用reloadData()因为在主视图中有一些逻辑检查条件,以便灰色表格行适用(我正在使用Core Data

我已经看到你已经认识到了这一点。 然而,更清洁和更具前途的方法是使用委托协议:

 protocol DetailViewControllerDelegate: class { func reloadTableView() } 

然后将一个委托属性添加到您的DetailViewController类并实现对该委托的调用:

 class DetailViewController: UIViewController { weak var delegate: DetailViewControllerDelegate? .... func reloadMasterTableView() { delegate?.reloadTableView() } } 

然后在你的MainViewController中实现委托方法:

 extension MainViewController: DetailViewControllerDelegate { func reloadTableView() { tableView.reloadData() } } 

不要忘了在创buildDetailViewController实例时将代理设置为:

 let detailViewController = DetailViewController() detailViewController.delegate = self 

由于我能够访问我的viewController,我能够像这样访问父视图控制器:

  func reloadMasterTableView(){ let navVC: UINavigationController = self.splitViewController!.viewControllers[0] as! UINavigationController let sectionsVC : UIMasterViewController = navVC.topViewController as! UIMasterViewController sectionsVC.tableView.reloadData() } 

我build议你使用NSNotificationCenter。 如果你想通过导航控制器来做到这一点,代码应该在迅速工作。

 let navController: UINavigationController = self.splitViewController!.viewControllers[0] as! UINavigationController let controller: MasterViewController = navController.topViewController as! MasterViewController controller.tableView.reloadData()