我有3个ViewController:ViewController A和ViewController B,以及Controller C,它实际上是由两个UIView组成的ContainerView
如上图所示,ViewController C具有清晰的背景,因此可以在ViewController A和B的UIView中看到“测试标签”。
当我从ViewController A向上滑动以转到ViewController B时,我希望能够执行一些动画(淡入/淡出,翻译,更改文本等)。假设我要将文本从“测试标签”更改为“一些新文本”,问题是,一旦我进入ViewController B,就会收到“在包装可选值时意外发现nil”错误。>
为什么我没有得到零,如何正确更改标签文本?
这段代码似乎很有意义,但是我做错了:
let containerViewController = ContainerViewController()
containerViewController.testLabel.text = "Some new text"
我也尝试过:
let containerViewController = storyboard?.instantiateViewController(withIdentifier: "containerViewController") as! containerViewController
containerViewController.testLabel.text = "Some new text"
我是否必须在ViewController A的覆盖功能准备中添加一些内容?
答案 0 :(得分:1)
您可以将嵌入的容器从容器中传递给viewController C的标识符,让其说embedSegueFromBToC
,然后在父控制器中为segue做准备时捕获实际的ViewController C
,例如说{{1} }。
因此,在B viewController中添加以下内容:
B
答案 1 :(得分:0)
正确的,您必须在原始视图控制器中使用prepare(for segue:..)覆盖,它将传递给ViewController B的实例作为segue.destination。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if let viewControllerB = segue.destination as? ViewControllerB
{
viewControllerB.testLabel.text = "Some new text"
}
}
查看本教程以获取更多信息:https://learnappmaking.com/pass-data-between-view-controllers-swift-how-to/