我是iOS开发的新手,我遇到了问题。 这是我的申请。 我想要实现的是当我点击开关时,它应该更新tableview概率。
这是我的故事板:
我可以使用委托协议获取DetailViewController(左侧控制器,祖先)中的开关更改值。但现在我不知道如何将新值广播到DetailChartViewController。 DetailChartViewController是一个包含UITableViewControllers的UIPageViewController(如屏幕截图所示)。那么如何从孩子到孩子的父母广播新的价值呢?我必须使用观察者模式吗?通知中心?
任何建议都会有所帮助。
答案 0 :(得分:4)
为detailChartViewController创建一个var,然后直接设置它。您可以在prepareForSegue方法中指定var。创建容器视图时,需要为嵌入式控制器设置标识符。然后,您的prepareForSegue方法将触发,您将该var分配给控制器。如果要从子级访问父级,可以从prepareForSegue func中传递对父级的引用,也可以创建协议/委托以进行回传(通常是首选)。
var detailFormViewController:DetailFormViewController? // Set the identifier for both of these in the identity inspector of these views in the storyboard
var detailViewController:DetailViewController?
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
if segue.identifier == "DetailView" {
self.detailViewController = segue.destinationViewController as! DetailViewController
// You can always pass the parent to the child like below although a delegate is a more preferred technique
self.detailViewController.parentViewController = self
} else if segue.identifier == "DetailFormViewController" {
self.detailFormViewController = segue.destinationViewController as! DetailFormViewController
}
}
func someFunction() {
// Now that you have a reference to your container view controllers you can access any of their objects directly from your parent view.
self.detailViewController.labelSomething.text = "Something"
self.detailFormViewController.labelSomethingElse.text = "Something else".
}