说我有两个屏幕。屏幕A有一个选择器和一个按钮,可触发到屏幕B的搜索,屏幕B根据选择器选择的选项显示一些内容。
我如何获得有关在A中选择了哪些选择器并传递给B的信息?到目前为止,我正在做:
@IBAction func pickThing(_ value: Int) {
self.thing = value;
}
似乎有效;我相信它正在检测价值并将其存储。但是,当我尝试添加@IBOutlet weak var thingLabel: WKInterfaceLabel!
以匹配B中的标签时,我只能在应用首次加载时设置其值。
如果我将self.thingLabel.setText("test")
放在awake()函数中,它将标签设置为“ test”,这样就可以了。但是将其更改为self.thingLabel.setText("thing \(self.thing)")
不起作用-它将其设置为self.thing初始化为的任何东西,但以后不再更改。因此awake()不是正确的方法。我也尝试将其放在willActivate和pickThing中,但是他们两个都没有做任何事情。
切换到屏幕时是否调用某些方法?如果没有,如何将数据从一个屏幕发送到下一个屏幕?
答案 0 :(得分:0)
例如在ViewController A上使用此功能
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? ViewControllerB {
vc.thing = self.thing
}
}
或者您可以在相同的方法中使用闭包,并从A上的B ViewController回调更改
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let vc = segue.destination as? ViewControllerB {
vc.clouser = { [weak self] thingB in
guard let `self` = self else { return }
self.thing = thingB
}
}
}
答案 1 :(得分:0)
您需要在视图控制器B中创建一个名为“ parentVC”的变量,该变量属于视图控制器A的类。在视图控制器A的类中,您需要调用prepare(for segue UIStoryboardSegue, sender: Any?)
。在这种方法中,您可以访问segue的destination属性,即视图控制器B。在这里,您可以将视图控制器B的“ parentVC”属性设置为“ self”,即视图控制器A。然后,在视图控制器B的类中,您可以访问使用“ parentVC”变量的视图控制器A的属性。视图控制器A的类中的代码如下所示:
func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.destination is ViewControllerB {
let viewControllerB = segue.destination as? ViewControllerB
viewControllerB.parentVC! = self
}
}