gpt4 book ai didi

ios - 容器 View Controller 之间的通信

转载 作者:搜寻专家 更新时间:2023-10-31 08:34:05 26 4
gpt4 key购买 nike

我是 iOS 开发的新手,但遇到了一个问题。这是我的申请。 screenshot我想要实现的是当我点击开关时,它应该更新 tableview 概率。

这是我的 Storyboard: storyboard

我能够使用委托(delegate)协议(protocol)在 DetailViewController(左侧的 Controller ,祖先)中获取开关的更改值。但是现在我不知道如何将新值广播到 DetailChartViewController。 DetailChartViewController 是一个包含 UITableViewController 的 UIPageViewController(如屏幕截图所示)。那么我怎样才能将一个新的值(value)从 child 传播到 parent 到 child 呢?我必须使用观察者模式吗?通知中心 ?

任何建议都会有所帮助。

最佳答案

为您的 detailChartViewController 创建一个 var,然后直接设置它。您可以在 prepareForSegue 方法中分配 var。当您创建容器 View 时,您需要为嵌入式 Controller 设置它的标识符。然后你的 prepareForSegue 方法将触发,这是你将 var 分配给 Controller 的地方。如果你想从 child 那里访问你的 parent ,你可以从 prepareForSegue 函数中传递对你 parent 的引用,或者创建一个协议(protocol)/委托(delegate)来回传(通常是首选)。

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".
}

关于ios - 容器 View Controller 之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29680436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com