如何在下一个屏幕上更新标签?

时间:2018-10-02 14:50:35

标签: swift apple-watch

说我有两个屏幕。屏幕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中,但是他们两个都没有做任何事情。

切换到屏幕时是否调用某些方法?如果没有,如何将数据从一个屏幕发送到下一个屏幕?

2 个答案:

答案 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
    }

}