WatchOS:通过“下一页”segue 将数据从一个控制器传递到另一个控制器

问题描述 投票:0回答:3

我正在使用 WKInterfaceController.reloadRootControllers 加载 3 个界面控制器以及我的应用程序中的上下文。

一切都很好。但是,我需要通过滑动将数据从第 1 页传递到第 2 页。似乎没有可以以编程方式使用的 segue 来创建新上下文或以其他方式传递数据。

我该如何解决这个问题? 我不想为此创建一个单例。我知道如何在与其他 segue 的上下文中传递数据,这个问题特别与 Watchkit 上的“下一页”导航相关。目前我还没找到答案。

谢谢!

马库斯

swift segue watchkit apple-watch watchos
3个回答
1
投票

您尝试过在首页中使用 contextForSegue 吗?

override func contextForSegue(withIdentifier segueIdentifier: String) -> Any? {
    let myDate = "today"
    return myDate
}

0
投票

我也一直在寻找这个问题的答案..

NextPage Segue 类似于 iOS 中的

UIPageViewController
。我已经尝试过
contextForSegue(withIdentifier segueIdentifier: String)
,但滑动时不会调用它,并且您不能在故事板中给这个 segue
identifier

对我来说唯一的解决方法是使用

NotificationCenter

在第一个 InterfaceController 中,我在

willDisappear
/
didDeactivate
上发布了带有对象的通知,这与 watchOS 并没有真正产生区别,而在我订阅的第二个 InterfaceController 上。

NotificationCenter.default.post(name: Notification.Name("interface1WillDisappear"), object: context)
NotificationCenter.default.addObserver(self, selector: #selector(awake(withNotification:)), name: Notification.Name("interface1WillDisappear"), object: nil)

添加我添加了这个功能

func awake(withNotification notification: Notification) {
  guard let context = context as? MyContextObject else { return }
  print(context)
}

最后别忘了移除观察者

deinit {
  NotificationCenter.default.removeObserver(self)
}

希望这有帮助!


0
投票

答案基于文档。你必须覆盖这个:

func contextsForSegue(withIdentifier segueIdentifier: String) -> [Any]?

该函数的名称中包含“上下文”,而不是“上下文”。它专门用于基于页面的导航:

点击按钮时返回上下文对象以传递到一组基于页面的界面控制器。

还有:

数组中对象的数量必须与接口的数量匹配 存在于基于页面的界面中的控制器 Segue 的目标。

这意味着当我们导航到基于页面的 UI 时,我们必须为顶级 Segue(推送或模态)上的每个页面指定所有上下文。

© www.soinside.com 2019 - 2024. All rights reserved.