如何从扩展代表处呈现Apple Watch上的模态

时间:2016-05-10 14:50:53

标签: ios apple-watch watch-os-2

我正在更新Watch OS 2.0客户端应用程序的监视工具包支持。

iOS应用程序向本地通知添加自定义操作,如果在本地通知触发时手机被锁定,则会导致手表显示自定义按钮。

当用户点按该按钮时,分机代表会使用WCSession sendMessage:replyHandler:方法向手机发送消息。

如果用户点击操作按钮时手机仍处于锁定状态,我想向用户显示一条消息,说“请解锁手机”(有关“这些内容”的详细信息并不重要。)

但是,在WatchKit 2.0中,Extension委托是与接口控制器分开的一个小动物,并在手表上运行。

我能找到的所有显示接口控制器的方法,如presentAlertControllerWithTitle:message:preferredStyle:actions:,都是WKInterfaceController的方法。

如何从Extension委托中显示新的接口控制器?我试图从文档(以及谷歌搜索)中弄清楚这一点,但到目前为止,尽管进行了相当广泛的搜索,但我已经完成了。

1 个答案:

答案 0 :(得分:1)

在尝试显示UI以响应扩展委托消息时,我遇到了类似的问题。

您可以通过[[WKExtension sharedExtension] rootInterfaceController]获取根控制器,但是没有任何方法可以从根控制器中走出控制器层次结构,因此如果您推送/呈现其他控制器,它并不是非常有用

我最终创建了一个WKInterfaceController子类,在NSNotificationCenter上订阅didAppear并在willDisappear上取消订阅,理论上应该只指一个控制器(可见一个)虽然我没有彻底测试它以确保没有任何奇怪的角落案例。

扩展委托在收到本地或远程通知时发送通知,接口控制器中的通知回调只调用presentAlertControllerWithTitle:...,所有接口控制器都从该子类继承。

我正在尝试在手表应用程序打开时收到远程通知时显示警报,而不是响应通知操作中的应用程序打开。我不确定接口控制器didAppear和扩展委托handleActionWithIdentifier方法的调用顺序,因此在处理操作时可能没有任何接口控制器监听通知。如果首先调用handleAction...,那么您可能需要在didAppear上向接口控制器添加一些逻辑,以检查是否有某些待处理通知显示并让它显示出来。