我正在使用 WKInterfaceController.reloadRootControllers 加载 3 个界面控制器以及我的应用程序中的上下文。
一切都很好。但是,我需要通过滑动将数据从第 1 页传递到第 2 页。似乎没有可以以编程方式使用的 segue 来创建新上下文或以其他方式传递数据。
我该如何解决这个问题? 我不想为此创建一个单例。我知道如何在与其他 segue 的上下文中传递数据,这个问题特别与 Watchkit 上的“下一页”导航相关。目前我还没找到答案。
谢谢!
马库斯
您尝试过在首页中使用 contextForSegue 吗?
override func contextForSegue(withIdentifier segueIdentifier: String) -> Any? {
let myDate = "today"
return myDate
}
我也一直在寻找这个问题的答案..
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)
}
希望这有帮助!
答案基于文档。你必须覆盖这个:
func contextsForSegue(withIdentifier segueIdentifier: String) -> [Any]?
点击按钮时返回上下文对象以传递到一组基于页面的界面控制器。
还有:
数组中对象的数量必须与接口的数量匹配 存在于基于页面的界面中的控制器 Segue 的目标。
这意味着当我们导航到基于页面的 UI 时,我们必须为顶级 Segue(推送或模态)上的每个页面指定所有上下文。